FreeBSD Bugzilla – Attachment 60533 Details for
Bug 90830
[patch] update for books/arch-handbook/pci
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
pci.diff
pci.diff (text/plain), 6.48 KB, created by
Marius Nuennerich
on 2005-12-22 23:10:02 UTC
(
hide
)
Description:
pci.diff
Filename:
MIME Type:
Creator:
Marius Nuennerich
Created:
2005-12-22 23:10:02 UTC
Size:
6.48 KB
patch
obsolete
>--- chapter.sgml.bak Sun Dec 18 23:13:36 2005 >+++ chapter.sgml Thu Dec 22 23:38:34 2005 >@@ -18,138 +18,131 @@ > <para>Information here about how the PCI bus code iterates through > the unattached devices and see if a newly loaded kld will attach > to any of them.</para> >+ <sect2> >+ <title>Sample code:</title> > >-<programlisting>/* >+ <programlisting>/* > * Simple KLD to play with the PCI functions. > * > * Murray Stokely > */ > >-#define MIN(a,b) (((a) < (b)) ? (a) : (b)) >- > #include <sys/param.h> /* defines used in kernel.h */ > #include <sys/module.h> > #include <sys/systm.h> >-#include <sys/errno.h> >+#include <sys/errno.h> /* ENXIO */ > #include <sys/kernel.h> /* types used in module initialization */ > #include <sys/conf.h> /* cdevsw struct */ > #include <sys/uio.h> /* uio struct */ > #include <sys/malloc.h> >-#include <sys/bus.h> /* structs, prototypes for pci bus stuff */ >+#include <sys/bus.h> /* structs, prototypes for pci bus stuff */ > > #include <machine/bus.h> > #include <sys/rman.h> > #include <machine/resource.h> > >-#include <dev/pci/pcivar.h> /* For get_pci macros! */ >+#include <dev/pci/pcivar.h> /* For pci_get macros! */ > #include <dev/pci/pcireg.h> > > /* Function prototypes */ >-d_open_t mypci_open; >-d_close_t mypci_close; >-d_read_t mypci_read; >-d_write_t mypci_write; >+static d_open_t mypci_open; >+static d_close_t mypci_close; >+static d_read_t mypci_read; >+static d_write_t mypci_write; > > /* Character device entry points */ >- > static struct cdevsw mypci_cdevsw = { > .d_open = mypci_open, > .d_close = mypci_close, > .d_read = mypci_read, > .d_write = mypci_write, >- .d_name = "mypci", >+ .d_name = "mypci" > }; > > /* vars */ >-static dev_t sdev; >+static struct cdev *mypci_dev; /* for make_dev */ > >-/* We're more interested in probe/attach than with >- open/close/read/write at this point */ >+/* >+ * We're more interested in probe/attach than with >+ * open/close/read/write at this point >+ */ > >-int >-mypci_open(dev_t dev, int oflags, int devtype, d_thread_t *td) >+static int >+mypci_open(struct cdev *dev, int oflags, int devtype, d_thread_t *td) > { >- int err = 0; >- >- printf("Opened device \"mypci\" successfully.\n"); >- return (err); >+ printf("mypci: open!\n"); >+ return (0); > } > >-int >-mypci_close(dev_t dev, int fflag, int devtype, d_thread_t *td) >+static int >+mypci_close(struct cdev *dev, int fflag, int devtype, d_thread_t *td) > { >- int err = 0; >- >- printf("Closing device \"mypci.\"\n"); >- return (err); >+ printf("mypci: close!\n"); >+ return (0); > } > >-int >-mypci_read(dev_t dev, struct uio *uio, int ioflag) >+static int >+mypci_read(struct cdev *dev, struct uio *uio, int ioflag) > { >- int err = 0; >- >- printf("mypci read!\n"); >- return (err); >+ printf("mypci: read!\n"); >+ return (0); > } > >-int >-mypci_write(dev_t dev, struct uio *uio, int ioflag) >+static int >+mypci_write(struct cdev *dev, struct uio *uio, int ioflag) > { >- int err = 0; >- >- printf("mypci write!\n"); >- return (err); >+ printf("mypci: write!\n"); >+ return (0); > } > > /* PCI Support Functions */ > > /* >- * Return identification string if this is device is ours. >+ * Print identification string if this device is ours. > */ > static int > mypci_probe(device_t dev) > { >- device_printf(dev, "MyPCI Probe\nVendor ID : 0x%x\nDevice ID : 0x%x\n", >+ device_printf(dev, "probe: VendorID: 0x%04x DeviceID: 0x%04x\n", > pci_get_vendor(dev), pci_get_device(dev)); > > if (pci_get_vendor(dev) == 0x11c1) { >- printf("We've got the Winmodem, probe successful!\n"); >- return (0); >+ device_printf(dev, "We've got the Winmodem, probe successful!\n"); >+ device_set_desc(dev, "Winmodem"); >+ return (BUS_PROBE_DEFAULT); > } > return (ENXIO); > } > >-/* Attach function is only called if the probe is successful */ >- >+/* >+ * Attach function is only called if the probe is successful. >+ */ > static int > mypci_attach(device_t dev) > { >- >- printf("MyPCI Attach for : deviceID : 0x%x\n",pci_get_vendor(dev)); >- sdev = make_dev(<literal>&</literal>mypci_cdevsw, 0, UID_ROOT, >+ device_printf(dev, "attach: DeviceID: 0x%04x\n", pci_get_device(dev)); >+ mypci_dev = make_dev(<literal>&</literal>mypci_cdevsw, 0, UID_ROOT, > GID_WHEEL, 0600, "mypci"); >- printf("Mypci device loaded.\n"); >- return (ENXIO); >+ return (0); > } > >-/* Detach device. */ >- >+/* >+ * Detach device. >+ */ > static int > mypci_detach(device_t dev) > { >- >- printf("Mypci detach!\n"); >+ device_printf(dev, "detach!\n"); > return (0); > } > >-/* Called during system shutdown after sync. */ >- >+/* >+ * Called during system shutdown after sync. >+ */ > static int > mypci_shutdown(device_t dev) > { >- >- printf("Mypci shutdown!\n"); >+ device_printf(dev, "shutdown!\n"); > return (0); > } > >@@ -159,20 +152,17 @@ > static int > mypci_suspend(device_t dev) > { >- >- printf("Mypci suspend!\n"); >+ device_printf(dev, "suspend!\n"); > return (0); > } > > /* > * Device resume routine. > */ >- > static int > mypci_resume(device_t dev) > { >- >- printf("Mypci resume!\n"); >+ device_printf(dev, "resume!\n"); > return (0); > } > >@@ -191,24 +181,41 @@ > static driver_t mypci_driver = { > "mypci", > mypci_methods, >- 0, >- /* sizeof(struct mypci_softc), */ >+ 0 /* sizeof(struct mypci_softc) */ > }; > > static devclass_t mypci_devclass; > > DRIVER_MODULE(mypci, pci, mypci_driver, mypci_devclass, 0, 0);</programlisting> > >- <para>Additional Resources >- <itemizedlist> >- <listitem><simpara><ulink url="http://www.pcisig.org/">PCI >- Special Interest Group</ulink></simpara></listitem> >+ </sect2> >+ <sect2> >+ <title>Makefile</title> >+ >+ <programlisting>KMOD=mypci >+SRCS=mypci.c >+SRCS+=device_if.h bus_if.h pci_if.h >+ >+.include <bsd.kmod.mk></programlisting> >+ >+ <para>Simply running <command>make</command> with the above >+ <filename>Makefile</filename> >+ will create a file <filename>mypci.ko</filename> that can >+ be loaded into your system by typing: >+ <screen>&prompt.root; <userinput>kldload ./mypci.ko</userinput></screen> >+ </para> >+ </sect2> >+ <sect2> >+ <title>Additional Resources</title> >+ <itemizedlist> >+ <listitem><simpara><ulink url="http://www.pcisig.org/">PCI >+ Special Interest Group</ulink></simpara></listitem> > >- <listitem><simpara>PCI System Architecture, Fourth Edition by >- Tom Shanley, et al.</simpara></listitem> >+ <listitem><simpara>PCI System Architecture, Fourth Edition by >+ Tom Shanley, et al.</simpara></listitem> > >- </itemizedlist> >- </para> >+ </itemizedlist> >+ </sect2> > </sect1> > > <sect1 id="pci-bus">
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 90830
: 60533