ports/58721: Installation of pci/pci.h
Samuel Tardieu
sam at rfc1149.net
Thu Oct 30 12:30:23 UTC 2003
>Number: 58721
>Category: ports
>Synopsis: Installation of pci/pci.h
>Confidential: no
>Severity: non-critical
>Priority: medium
>Responsible: freebsd-ports-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: update
>Submitter-Id: current-users
>Arrival-Date: Thu Oct 30 04:30:20 PST 2003
>Closed-Date:
>Last-Modified:
>Originator: Samuel Tardieu
>Release: FreeBSD 4.9-RC i386
>Organization:
>Environment:
System: FreeBSD willow 4.9-RC FreeBSD 4.9-RC #1: Sun Oct 12 22:38:04 CEST 2003 root at willow:/usr/obj/usr/src/sys/WILLOW i386
>Description:
devel/libpci does not install any header file, making the PCI library hard
to use.
>How-To-Repeat:
>Fix:
The following patch installs an appropriate and self-contained header file as
${PREFIX}/include/pci/pci.h.
The file is built by removing the local includes in upstream pci.h and
adding "#define OS_FREEBSD" in it.
Note to committer: files/pci.h must be added when applying this patch.
--- Makefile.orig Thu Oct 30 13:19:38 2003
+++ Makefile Thu Oct 30 13:25:15 2003
@@ -38,5 +38,7 @@
@(${CP} ${WRKSRC}/lib/libpci.so ${PREFIX}/lib/libpci.so.2)
@(${CP} ${WRKSRC}/lib/libpci.a ${PREFIX}/lib/libpci.a)
@(${LN} -sf ${PREFIX}/lib/libpci.so.2.1 ${PREFIX}/lib/libpci.so)
+ @(${MKDIR} ${PREFIX}/include/pci)
+ @(${CP} ${FILESDIR}/pci.h ${PREFIX}/include/pci/pci.h)
.include <bsd.port.mk>
--- pkg-plist.orig Thu Oct 30 13:19:41 2003
+++ pkg-plist Thu Oct 30 13:21:56 2003
@@ -1,3 +1,5 @@
lib/libpci.a
lib/libpci.so
lib/libpci.so.2
+include/pci/pci.h
+ at dirrm include/pci
--- /dev/null Thu Oct 30 13:25:16 2003
+++ files/pci.h Thu Oct 30 13:19:29 2003
@@ -0,0 +1,201 @@
+/*
+ * $Id: pci.h,v 1.12 2003/01/04 11:04:39 mj Exp $
+ *
+ * The PCI Library
+ *
+ * Copyright (c) 1997--2002 Martin Mares <mj at ucw.cz>
+ *
+ * Can be freely distributed and used under the terms of the GNU GPL.
+ */
+
+#ifndef _PCI_LIB_H
+#define _PCI_LIB_H
+
+#define OS_FREEBSD
+
+/*
+ * Types
+ */
+
+#ifdef OS_LINUX
+#include <linux/types.h>
+
+typedef __u8 byte;
+typedef __u8 u8;
+typedef __u16 word;
+typedef __u16 u16;
+typedef __u32 u32;
+#endif
+
+#ifdef OS_FREEBSD
+#include <sys/types.h>
+
+typedef u_int8_t byte;
+typedef u_int8_t u8;
+typedef u_int16_t word;
+typedef u_int16_t u16;
+typedef u_int32_t u32;
+#endif
+
+#ifdef OS_NETBSD
+#include <sys/types.h>
+
+typedef u_int8_t byte;
+typedef u_int8_t u8;
+typedef u_int16_t word;
+typedef u_int16_t u16;
+typedef u_int32_t u32;
+#endif
+
+#ifdef OS_AIX
+#include <sys/param.h>
+
+typedef u_int8_t byte;
+typedef u_int8_t u8;
+typedef u_int16_t word;
+typedef u_int16_t u16;
+typedef u_int32_t u32;
+#endif
+
+#ifdef HAVE_LONG_ADDRESS
+typedef unsigned long long pciaddr_t;
+#else
+typedef unsigned long pciaddr_t;
+#endif
+
+/*
+ * PCI Access Structure
+ */
+
+struct pci_methods;
+struct nl_entry;
+
+enum pci_access_type {
+ /* Known access methods, remember to update access.c as well */
+ PCI_ACCESS_AUTO, /* Autodetection (params: none) */
+ PCI_ACCESS_PROC_BUS_PCI, /* Linux /proc/bus/pci (params: path) */
+ PCI_ACCESS_I386_TYPE1, /* i386 ports, type 1 (params: none) */
+ PCI_ACCESS_I386_TYPE2, /* i386 ports, type 2 (params: none) */
+ PCI_ACCESS_FBSD_DEVICE, /* FreeBSD /dev/pci (params: path) */
+ PCI_ACCESS_AIX_DEVICE, /* /dev/pci0, /dev/bus0, etc. */
+ PCI_ACCESS_NBSD_LIBPCI, /* NetBSD libpci */
+ PCI_ACCESS_DUMP, /* Dump file (params: filename) */
+ PCI_ACCESS_MAX
+};
+
+struct pci_access {
+ /* Options you can change: */
+ unsigned int method; /* Access method */
+ char *method_params[PCI_ACCESS_MAX]; /* Parameters for the methods */
+ int writeable; /* Open in read/write mode */
+ int buscentric; /* Bus-centric view of the world */
+ char *id_file_name; /* Name of ID list file */
+ int numeric_ids; /* Don't resolve device IDs to names */
+ int debugging; /* Turn on debugging messages */
+
+ /* Functions you can override: */
+ void (*error)(char *msg, ...); /* Write error message and quit */
+ void (*warning)(char *msg, ...); /* Write a warning message */
+ void (*debug)(char *msg, ...); /* Write a debugging message */
+
+ struct pci_dev *devices; /* Devices found on this bus */
+
+ /* Fields used internally: */
+ struct pci_methods *methods;
+ char *nl_list; /* Name list cache */
+ struct nl_entry **nl_hash;
+ int fd; /* proc: fd */
+ int fd_rw; /* proc: fd opened read-write */
+ struct pci_dev *cached_dev; /* proc: device the fd is for */
+ int fd_pos; /* proc: current position */
+};
+
+/* Initialize PCI access */
+struct pci_access *pci_alloc(void);
+void pci_init(struct pci_access *);
+void pci_cleanup(struct pci_access *);
+
+/* Scanning of devices */
+void pci_scan_bus(struct pci_access *acc);
+struct pci_dev *pci_get_dev(struct pci_access *acc, int bus, int dev, int func); /* Raw access to specified device */
+void pci_free_dev(struct pci_dev *);
+
+/*
+ * Devices
+ */
+
+struct pci_dev {
+ struct pci_dev *next; /* Next device in the chain */
+ word bus; /* Higher byte can select host bridges */
+ byte dev, func; /* Device and function */
+
+ /* These fields are set by pci_fill_info() */
+ int known_fields; /* Set of info fields already known */
+ word vendor_id, device_id; /* Identity of the device */
+ int irq; /* IRQ number */
+ pciaddr_t base_addr[6]; /* Base addresses */
+ pciaddr_t size[6]; /* Region sizes */
+ pciaddr_t rom_base_addr; /* Expansion ROM base address */
+ pciaddr_t rom_size; /* Expansion ROM size */
+
+ /* Fields used internally: */
+ struct pci_access *access;
+ struct pci_methods *methods;
+ byte *cache; /* Cached information */
+ int cache_len;
+ int hdrtype; /* Direct methods: header type */
+ void *aux; /* Auxillary data */
+};
+
+#define PCI_ADDR_IO_MASK (~(pciaddr_t) 0x3)
+#define PCI_ADDR_MEM_MASK (~(pciaddr_t) 0xf)
+
+byte pci_read_byte(struct pci_dev *, int pos); /* Access to configuration space */
+word pci_read_word(struct pci_dev *, int pos);
+u32 pci_read_long(struct pci_dev *, int pos);
+int pci_read_block(struct pci_dev *, int pos, byte *buf, int len);
+int pci_write_byte(struct pci_dev *, int pos, byte data);
+int pci_write_word(struct pci_dev *, int pos, word data);
+int pci_write_long(struct pci_dev *, int pos, u32 data);
+int pci_write_block(struct pci_dev *, int pos, byte *buf, int len);
+
+int pci_fill_info(struct pci_dev *, int flags); /* Fill in device information */
+
+#define PCI_FILL_IDENT 1
+#define PCI_FILL_IRQ 2
+#define PCI_FILL_BASES 4
+#define PCI_FILL_ROM_BASE 8
+#define PCI_FILL_SIZES 16
+#define PCI_FILL_RESCAN 0x10000
+
+void pci_setup_cache(struct pci_dev *, byte *cache, int len);
+
+/*
+ * Filters
+ */
+
+struct pci_filter {
+ int bus, slot, func; /* -1 = ANY */
+ int vendor, device;
+};
+
+void pci_filter_init(struct pci_access *, struct pci_filter *);
+char *pci_filter_parse_slot(struct pci_filter *, char *);
+char *pci_filter_parse_id(struct pci_filter *, char *);
+int pci_filter_match(struct pci_filter *, struct pci_dev *);
+
+/*
+ * Device names
+ */
+
+char *pci_lookup_name(struct pci_access *a, char *buf, int size, int flags, u32 arg1, u32 arg2, u32 arg3, u32 arg4);
+void pci_free_name_list(struct pci_access *a);
+
+#define PCI_LOOKUP_VENDOR 1
+#define PCI_LOOKUP_DEVICE 2
+#define PCI_LOOKUP_CLASS 4
+#define PCI_LOOKUP_SUBSYSTEM 8
+#define PCI_LOOKUP_PROGIF 16
+#define PCI_LOOKUP_NUMERIC 0x10000
+
+#endif
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-ports-bugs
mailing list