/*
- * $Id: proc.c,v 1.5 1999/07/20 12:13:42 mj Exp $
+ * $Id: proc.c,v 1.10 2002/12/26 20:24:08 mj Exp $
*
* The PCI Library -- Configuration Access via /proc/bus/pci
*
- * Copyright (c) 1997--1999 Martin Mares <mj@atrey.karlin.mff.cuni.cz>
+ * Copyright (c) 1997--1999 Martin Mares <mj@ucw.cz>
*
* Can be freely distributed and used under the terms of the GNU GPL.
*/
#elif defined(i386)
/* old libc on i386 -> call syscalls directly the old way */
#include <asm/unistd.h>
-static _syscall4(int, pread, unsigned int, fd, void *, buf, size_t, size, loff_t, where);
-static _syscall4(int, pwrite, unsigned int, fd, void *, buf, size_t, size, loff_t, where);
+static _syscall5(int, pread, unsigned int, fd, void *, buf, size_t, size, u32, where_lo, u32, where_hi);
+static _syscall5(int, pwrite, unsigned int, fd, void *, buf, size_t, size, u32, where_lo, u32, where_hi);
+static int do_read(struct pci_dev *d UNUSED, int fd, void *buf, size_t size, int where) { return pread(fd, buf, size, where, 0); }
+static int do_write(struct pci_dev *d UNUSED, int fd, void *buf, size_t size, int where) { return pwrite(fd, buf, size, where, 0); }
+#define HAVE_DO_READ
#else
/* In all other cases we use lseek/read/write instead to be safe */
#define make_rw_glue(op) \
- static int do_##op(struct pci_dev *d, int fd, void *buf, size_t size, loff_t where) \
+ static int do_##op(struct pci_dev *d, int fd, void *buf, size_t size, int where) \
{ \
struct pci_access *a = d->access; \
int r; \
proc_scan(struct pci_access *a)
{
FILE *f;
- char buf[256];
+ char buf[512];
if (snprintf(buf, sizeof(buf), "%s/devices", a->method_params[PCI_ACCESS_PROC_BUS_PCI]) == sizeof(buf))
a->error("File name too long");
d->func = PCI_FUNC(dfn & 0xff);
d->vendor_id = vend >> 16U;
d->device_id = vend & 0xffff;
+ d->hdrtype = pci_read_byte(d, PCI_HEADER_TYPE);
known = PCI_FILL_IDENT;
if (!a->buscentric)
{