From owner-freebsd-ports-bugs@FreeBSD.ORG Thu Oct 30 04:30:23 2003 Return-Path: Delivered-To: freebsd-ports-bugs@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id AE4EE16A4CE for ; Thu, 30 Oct 2003 04:30:23 -0800 (PST) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id 949B443FDF for ; Thu, 30 Oct 2003 04:30:21 -0800 (PST) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.12.9/8.12.9) with ESMTP id h9UCULFY025254 for ; Thu, 30 Oct 2003 04:30:21 -0800 (PST) (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.12.9/8.12.9/Submit) id h9UCULEt025253; Thu, 30 Oct 2003 04:30:21 -0800 (PST) (envelope-from gnats) Resent-Date: Thu, 30 Oct 2003 04:30:21 -0800 (PST) Resent-Message-Id: <200310301230.h9UCULEt025253@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-ports-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Samuel Tardieu Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id BDF3616A4CF for ; Thu, 30 Oct 2003 04:27:34 -0800 (PST) Received: from willow.rfc1149.net (willow.rfc1149.net [213.41.154.244]) by mx1.FreeBSD.org (Postfix) with ESMTP id C202943F93 for ; Thu, 30 Oct 2003 04:27:31 -0800 (PST) (envelope-from sam@willow.rfc1149.net) Received: by willow.rfc1149.net (Postfix, from userid 1000) id B61CF3D61; Thu, 30 Oct 2003 13:27:29 +0100 (CET) Message-Id: <20031030122729.B61CF3D61@willow.rfc1149.net> Date: Thu, 30 Oct 2003 13:27:29 +0100 (CET) From: Samuel Tardieu To: FreeBSD-gnats-submit@FreeBSD.org X-Send-Pr-Version: 3.113 cc: samy@kerneled.com Subject: ports/58721: Installation of pci/pci.h X-BeenThere: freebsd-ports-bugs@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list Reply-To: Samuel Tardieu List-Id: Ports bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 30 Oct 2003 12:30:23 -0000 >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 --- 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 + * + * 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 + +typedef __u8 byte; +typedef __u8 u8; +typedef __u16 word; +typedef __u16 u16; +typedef __u32 u32; +#endif + +#ifdef OS_FREEBSD +#include + +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 + +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 + +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: