1 | /* $ZEL: pcisupport_linux2.4.c,v 1.3 2004/05/27 23:10:15 wuestner Exp $ */
|
---|
2 |
|
---|
3 | /*
|
---|
4 | * Copyright (c) 2001
|
---|
5 | * Matthias Drochner. All rights reserved.
|
---|
6 | *
|
---|
7 | * Redistribution and use in source and binary forms, with or without
|
---|
8 | * modification, are permitted provided that the following conditions
|
---|
9 | * are met:
|
---|
10 | * 1. Redistributions of source code must retain the above copyright
|
---|
11 | * notice, this list of conditions, and the following disclaimer.
|
---|
12 | * 2. Redistributions in binary form must reproduce the above copyright
|
---|
13 | * notice, this list of conditions and the following disclaimer in the
|
---|
14 | * documentation and/or other materials provided with the distribution.
|
---|
15 | *
|
---|
16 | * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
---|
17 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
---|
18 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
---|
19 | * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
---|
20 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
---|
21 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
---|
22 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
---|
23 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
---|
24 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
---|
25 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
---|
26 | * SUCH DAMAGE.
|
---|
27 | */
|
---|
28 |
|
---|
29 | #include <linux/config.h>
|
---|
30 | #include <linux/module.h>
|
---|
31 | #include <linux/kernel.h>
|
---|
32 | #include <linux/init.h>
|
---|
33 |
|
---|
34 | #include <linux/pci.h>
|
---|
35 |
|
---|
36 | #ifndef MODULENAME
|
---|
37 | #define MODULENAME sis1100
|
---|
38 | #endif
|
---|
39 |
|
---|
40 | #define __CONCAT(x,y) x ## y
|
---|
41 | #define __STRING(x) #x
|
---|
42 | #define DEVINITFUNC(mn) __CONCAT(mn, _linux_init)
|
---|
43 | #define DEVDONEFUNC(mn) __CONCAT(mn, _linux_done)
|
---|
44 | #define DRVINITFUNC(mn) __CONCAT(mn, _linux_drvinit)
|
---|
45 | #define DRVDONEFUNC(mn) __CONCAT(mn, _linux_drvdone)
|
---|
46 | #define PCITBLNAME(mn) __CONCAT(mn, _table)
|
---|
47 | #define MODULINFOFUNC(mn) __CONCAT(mn, _print_info)
|
---|
48 | #define __SS(s) __STRING(s)
|
---|
49 |
|
---|
50 | int DEVINITFUNC(MODULENAME)(struct pci_dev *);
|
---|
51 | void DEVDONEFUNC(MODULENAME)(struct pci_dev *);
|
---|
52 | int DRVINITFUNC(MODULENAME)(void);
|
---|
53 | void DRVDONEFUNC(MODULENAME)(void);
|
---|
54 | void MODULINFOFUNC(MODULENAME)(void);
|
---|
55 |
|
---|
56 | static int
|
---|
57 | device_init(struct pci_dev *pdev, const struct pci_device_id *ent)
|
---|
58 | {
|
---|
59 | int res;
|
---|
60 |
|
---|
61 | res = pci_enable_device (pdev);
|
---|
62 | if (res)
|
---|
63 | return (res);
|
---|
64 | return (DEVINITFUNC(MODULENAME)(pdev));
|
---|
65 | }
|
---|
66 |
|
---|
67 | static void
|
---|
68 | device_done(struct pci_dev *pdev)
|
---|
69 | {
|
---|
70 | DEVDONEFUNC(MODULENAME)(pdev);
|
---|
71 | }
|
---|
72 |
|
---|
73 | extern struct pci_device_id PCITBLNAME(MODULENAME)[];
|
---|
74 |
|
---|
75 | static struct pci_driver driver = {
|
---|
76 | name: __SS(MODULENAME),
|
---|
77 | id_table: PCITBLNAME(MODULENAME),
|
---|
78 | probe: device_init,
|
---|
79 | remove: device_done,
|
---|
80 | };
|
---|
81 |
|
---|
82 | static int __init
|
---|
83 | init_pcidrv_module(void)
|
---|
84 | {
|
---|
85 | int res;
|
---|
86 |
|
---|
87 | MODULINFOFUNC(MODULENAME)();
|
---|
88 | res = pci_module_init(&driver);
|
---|
89 | if (res)
|
---|
90 | return (res);
|
---|
91 |
|
---|
92 | return (DRVINITFUNC(MODULENAME)());
|
---|
93 | }
|
---|
94 |
|
---|
95 | static void __exit
|
---|
96 | cleanup_pcidrv_module(void)
|
---|
97 | {
|
---|
98 | printk(KERN_INFO __SS(MODULENAME) " exit\n");
|
---|
99 | pci_unregister_driver(&driver);
|
---|
100 | DRVDONEFUNC(MODULENAME)();
|
---|
101 | }
|
---|
102 |
|
---|
103 | module_init(init_pcidrv_module);
|
---|
104 | module_exit(cleanup_pcidrv_module);
|
---|