OpenCores
URL https://opencores.org/ocsvn/test_project/test_project/trunk

Subversion Repositories test_project

[/] [test_project/] [trunk/] [linux_sd_driver/] [drivers/] [ata/] [pata_netcell.c] - Blame information for rev 62

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 62 marcus.erl
/*
2
 *    pata_netcell.c - Netcell PATA driver
3
 *
4
 *      (c) 2006 Red Hat  <alan@redhat.com>
5
 */
6
 
7
#include <linux/kernel.h>
8
#include <linux/module.h>
9
#include <linux/pci.h>
10
#include <linux/init.h>
11
#include <linux/blkdev.h>
12
#include <linux/delay.h>
13
#include <linux/device.h>
14
#include <scsi/scsi_host.h>
15
#include <linux/libata.h>
16
#include <linux/ata.h>
17
 
18
#define DRV_NAME        "pata_netcell"
19
#define DRV_VERSION     "0.1.7"
20
 
21
/* No PIO or DMA methods needed for this device */
22
 
23
static struct scsi_host_template netcell_sht = {
24
        .module                 = THIS_MODULE,
25
        .name                   = DRV_NAME,
26
        .ioctl                  = ata_scsi_ioctl,
27
        .queuecommand           = ata_scsi_queuecmd,
28
        .can_queue              = ATA_DEF_QUEUE,
29
        .this_id                = ATA_SHT_THIS_ID,
30
        .sg_tablesize           = LIBATA_MAX_PRD,
31
        .cmd_per_lun            = ATA_SHT_CMD_PER_LUN,
32
        .emulated               = ATA_SHT_EMULATED,
33
        .use_clustering         = ATA_SHT_USE_CLUSTERING,
34
        .proc_name              = DRV_NAME,
35
        .dma_boundary           = ATA_DMA_BOUNDARY,
36
        .slave_configure        = ata_scsi_slave_config,
37
        .slave_destroy          = ata_scsi_slave_destroy,
38
        /* Use standard CHS mapping rules */
39
        .bios_param             = ata_std_bios_param,
40
};
41
 
42
static const struct ata_port_operations netcell_ops = {
43
        /* Task file is PCI ATA format, use helpers */
44
        .tf_load                = ata_tf_load,
45
        .tf_read                = ata_tf_read,
46
        .check_status           = ata_check_status,
47
        .exec_command           = ata_exec_command,
48
        .dev_select             = ata_std_dev_select,
49
 
50
        .freeze                 = ata_bmdma_freeze,
51
        .thaw                   = ata_bmdma_thaw,
52
        .error_handler          = ata_bmdma_error_handler,
53
        .post_internal_cmd      = ata_bmdma_post_internal_cmd,
54
        .cable_detect           = ata_cable_80wire,
55
 
56
        /* BMDMA handling is PCI ATA format, use helpers */
57
        .bmdma_setup            = ata_bmdma_setup,
58
        .bmdma_start            = ata_bmdma_start,
59
        .bmdma_stop             = ata_bmdma_stop,
60
        .bmdma_status           = ata_bmdma_status,
61
        .qc_prep                = ata_qc_prep,
62
        .qc_issue               = ata_qc_issue_prot,
63
        .data_xfer              = ata_data_xfer,
64
 
65
        /* IRQ-related hooks */
66
        .irq_handler            = ata_interrupt,
67
        .irq_clear              = ata_bmdma_irq_clear,
68
        .irq_on                 = ata_irq_on,
69
 
70
        /* Generic PATA PCI ATA helpers */
71
        .port_start             = ata_sff_port_start,
72
};
73
 
74
 
75
/**
76
 *      netcell_init_one - Register Netcell ATA PCI device with kernel services
77
 *      @pdev: PCI device to register
78
 *      @ent: Entry in netcell_pci_tbl matching with @pdev
79
 *
80
 *      Called from kernel PCI layer.
81
 *
82
 *      LOCKING:
83
 *      Inherited from PCI layer (may sleep).
84
 *
85
 *      RETURNS:
86
 *      Zero on success, or -ERRNO value.
87
 */
88
 
89
static int netcell_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
90
{
91
        static int printed_version;
92
        static const struct ata_port_info info = {
93
                .sht            = &netcell_sht,
94
                .flags          = ATA_FLAG_SLAVE_POSS,
95
                /* Actually we don't really care about these as the
96
                   firmware deals with it */
97
                .pio_mask       = 0x1f, /* pio0-4 */
98
                .mwdma_mask     = 0x07, /* mwdma0-2 */
99
                .udma_mask      = ATA_UDMA5, /* UDMA 133 */
100
                .port_ops       = &netcell_ops,
101
        };
102
        const struct ata_port_info *port_info[] = { &info, NULL };
103
 
104
        if (!printed_version++)
105
                dev_printk(KERN_DEBUG, &pdev->dev,
106
                           "version " DRV_VERSION "\n");
107
 
108
        /* Any chip specific setup/optimisation/messages here */
109
        ata_pci_clear_simplex(pdev);
110
 
111
        /* And let the library code do the work */
112
        return ata_pci_init_one(pdev, port_info);
113
}
114
 
115
static const struct pci_device_id netcell_pci_tbl[] = {
116
        { PCI_VDEVICE(NETCELL, PCI_DEVICE_ID_REVOLUTION), },
117
 
118
        { }     /* terminate list */
119
};
120
 
121
static struct pci_driver netcell_pci_driver = {
122
        .name                   = DRV_NAME,
123
        .id_table               = netcell_pci_tbl,
124
        .probe                  = netcell_init_one,
125
        .remove                 = ata_pci_remove_one,
126
#ifdef CONFIG_PM
127
        .suspend                = ata_pci_device_suspend,
128
        .resume                 = ata_pci_device_resume,
129
#endif
130
};
131
 
132
static int __init netcell_init(void)
133
{
134
        return pci_register_driver(&netcell_pci_driver);
135
}
136
 
137
static void __exit netcell_exit(void)
138
{
139
        pci_unregister_driver(&netcell_pci_driver);
140
}
141
 
142
module_init(netcell_init);
143
module_exit(netcell_exit);
144
 
145
MODULE_AUTHOR("Alan Cox");
146
MODULE_DESCRIPTION("SCSI low-level driver for Netcell PATA RAID");
147
MODULE_LICENSE("GPL");
148
MODULE_DEVICE_TABLE(pci, netcell_pci_tbl);
149
MODULE_VERSION(DRV_VERSION);
150
 

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.