Date: Thu, 30 Oct 2003 13:27:29 +0100 (CET) From: Samuel Tardieu <sam@rfc1149.net> To: FreeBSD-gnats-submit@FreeBSD.org Cc: samy@kerneled.com Subject: ports/58721: Installation of pci/pci.h Message-ID: <20031030122729.B61CF3D61@willow.rfc1149.net> Resent-Message-ID: <200310301230.h9UCULEt025253@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>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@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 +@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@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:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20031030122729.B61CF3D61>