Skip site navigation (1)Skip section navigation (2)
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>