]> CyberLeo.Net >> Repos - FreeBSD/releng/9.2.git/blob - sys/modules/ata/atadevel/ata-devel.c
- Copy stable/9 to releng/9.2 as part of the 9.2-RELEASE cycle.
[FreeBSD/releng/9.2.git] / sys / modules / ata / atadevel / ata-devel.c
1 /*-
2  * Copyright (c) 2008 S\xf8ren Schmidt <sos@FreeBSD.org>
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer,
10  *    without modification, immediately at the beginning of the file.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the distribution.
14  *
15  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
16  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
17  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
18  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
19  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
20  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25  */
26
27 #include <sys/cdefs.h>
28 __FBSDID("$FreeBSD$");
29
30 #include <sys/param.h>
31 #include <sys/module.h>
32 #include <sys/systm.h>
33 #include <sys/kernel.h>
34 #include <sys/ata.h>
35 #include <sys/lock.h>
36 #include <sys/mutex.h>
37 #include <sys/sema.h>
38 #include <sys/taskqueue.h>
39 #include <sys/errno.h>
40 #include <sys/kernel.h>
41 #include <sys/conf.h>
42 #include <sys/uio.h>
43 #include <sys/malloc.h>
44 #include <sys/bus.h>
45
46 #include <vm/uma.h>
47
48 #include <machine/stdarg.h>
49 #include <machine/resource.h>
50 #include <machine/bus.h>
51 #include <sys/rman.h>
52
53 #include <dev/pci/pcivar.h> 
54 #include <dev/pci/pcireg.h>
55
56 #include <dev/ata/ata-all.h>
57 #include <dev/ata/ata-pci.h>
58 #include <ata_if.h>
59
60 /* prototypes */
61 static int ata_devel_chipinit(device_t dev);
62 static int ata_devel_allocate(device_t dev);
63 static void ata_devel_setmode(device_t dev, int mode);
64
65
66 static int
67 ata_devel_probe(device_t dev)
68 {
69     struct ata_pci_controller *ctlr = device_get_softc(dev);
70
71     device_printf(dev, "ata_devel_probe(): PCIID=0x%08x\n", pci_get_devid(dev));
72     if (pci_get_devid(dev) == 0x12345678) {
73         printf("test probe successful!\n");
74         device_set_desc(dev, "ATA DEVEL controller");
75         ctlr->chipinit = ata_devel_chipinit;
76         return 0;
77     }
78     return ENXIO;
79 }
80
81 static int
82 ata_devel_chipinit(device_t dev)
83 {
84     struct ata_pci_controller *ctlr = device_get_softc(dev);
85
86     /* setup interrupt delivery */
87     if (ata_setup_interrupt(dev, ata_generic_intr))
88         return ENXIO;
89
90     /* perform any chipset specific setups here */
91
92     /* setup function ptr's, in this case allocate and setmode */
93     ctlr->allocate = ata_devel_allocate;
94     ctlr->setmode = ata_devel_setmode;
95
96     return 0;
97 }
98
99 static int
100 ata_devel_allocate(device_t dev)
101 {
102     if (ata_pci_allocate(dev))
103         return ENXIO;
104
105     /* setup channel specifics here like offsets to registers etc */
106
107     return 0;
108 }
109
110 static void
111 ata_devel_setmode(device_t dev, int mode)
112 {
113     struct ata_device *atadev = device_get_softc(dev);
114     int error;
115
116     error = ata_controlcmd(dev, ATA_SETFEATURES, ATA_SF_SETXFER, 0,
117                            ata_limit_mode(dev, mode, ATA_UDMA5));
118     if (bootverbose)
119         device_printf(dev, "%ssetting %s on DEVEL chip\n",
120                       (error) ? "FAILURE " : "", ata_mode2str(mode));
121     if (!error)
122         atadev->mode = mode;
123 }
124
125 ATA_DECLARE_DRIVER(ata_devel);