summaryrefslogtreecommitdiffstats
path: root/drivers/misc/mei
Commit message (Expand)AuthorAgeFilesLines
* mei: stop the stall timer worker if not neededAlexander Usyskin2016-09-277-7/+29
* mei: me: add kaby point device idsAlexander Usyskin2016-09-122-0/+6
* Merge 4.8-rc5 into char-misc-nextGreg Kroah-Hartman2016-09-052-4/+10
|\
| * mei: me: disable driver on SPT SPS firmwareTomas Winkler2016-08-302-4/+10
* | mei: amthif: fix deadlock in initialization during a resetAlexander Usyskin2016-08-302-5/+9
* | mei: drop unused file transaction statesAlexander Usyskin2016-08-301-3/+0Star
* | mei: amthif: drop mei_amthif_readAlexander Usyskin2016-08-304-109/+1Star
* | mei: enqueue consecutive readsAlexander Usyskin2016-08-302-20/+22
* | mei: add wrapper for queuing control commands.Tomas Winkler2016-08-306-39/+61
* | mei: use consistent naming for TX control flow creditsTomas Winkler2016-08-303-45/+43Star
* | mei: rx flow control counterAlexander Usyskin2016-08-303-29/+16Star
* | mei: prepare read cb for fixed address clients on the receive path only.Alexander Usyskin2016-08-301-5/+3Star
* | mei: drop redundant krealloc and checks in irq readAlexander Usyskin2016-08-301-25/+11Star
* | mei: amthif: drop mei_clear_lists functionAlexander Usyskin2016-08-301-22/+5Star
* | mei: add read callback on demand for fixed_address clientsAlexander Usyskin2016-08-302-13/+12Star
* | mei: add file pointer to the host client structureAlexander Usyskin2016-08-304-10/+10
* | mei: move read cb to complete queue if not connectedAlexander Usyskin2016-08-301-0/+1
* | mei: fix return value on disconnectionTomas Winkler2016-08-303-3/+3
* | mei: drop read complete queue emptiness checkAlexander Usyskin2016-08-302-2/+4
* | mei: hbm: add missing argument in the kdocTomas Winkler2016-08-301-0/+1
* | mei: recover after errors in runtime pm flowAlexander Usyskin2016-08-304-0/+19
* | mei: drop mei_io_cb_alloc_bufAlexander Usyskin2016-08-302-28/+6Star
* | mei: amthif: use mei_cl_alloc_cb for allocating cbsAlexander Usyskin2016-08-301-13/+3Star
* | mei: amthif: drop mei_amthif_send_cmdAlexander Usyskin2016-08-301-36/+16Star
* | mei: amthif: enable poll for async eventsAlexander Usyskin2016-08-301-5/+5
* | mei: amthif: drop iamthif_current_cbAlexander Usyskin2016-08-303-10/+0Star
* | mei: amthif: fix request cancelAlexander Usyskin2016-08-302-75/+38Star
* | mei: amthif: drop READ_COMPLETE stateAlexander Usyskin2016-08-303-28/+13Star
|/
* Merge 4.7-rc4 into char-misc-nextGreg Kroah-Hartman2016-06-251-1/+1
|\
| * mei: don't use wake_up_interruptible for wr_ctrlAlexander Usyskin2016-06-111-1/+1
* | mei: drop wr_msg from the mei_dev structureAlexander Usyskin2016-06-112-79/+68Star
|/
* mei: bus: call mei_cl_read_start under device lockAlexander Usyskin2016-05-041-3/+12
* mei: fix waiting for wr_ctrl for corner cases.Alexander Usyskin2016-04-301-4/+14
* mei: don't clean control queues on notify request timeoutAlexander Usyskin2016-04-301-6/+2Star
* mei: amthif: discard not read messagesAlexander Usyskin2016-04-303-2/+5
* mei: fix NULL dereferencing during FW initiated disconnectionAlexander Usyskin2016-04-303-6/+6
* mei: drop global me_client_indexAlexander Usyskin2016-04-302-17/+8Star
* mei: do not pin module if cldrv->probe() failedAlexey Khoroshilov2016-04-301-2/+6
* mei: bus: use scnprintf in *_showRasmus Villemoes2016-04-011-15/+4Star
* mei: me: add broxton pci device idsTomas Winkler2016-03-022-0/+7
* mei: fix format string in debug printsAlexander Usyskin2016-02-204-6/+6
* Merge 4.5-rc4 into char-misc-nextGreg Kroah-Hartman2016-02-141-1/+5
|\
| * mei: validate request value in client notify request ioctlAlexander Usyskin2016-02-071-1/+5
* | mei: fix double freeing of a cb during link resetAlexander Usyskin2016-02-123-20/+14Star
* | mei: wd: drop AGAIN the watchdog code from the core mei driverTomas Winkler2016-02-101-391/+0Star
* | mei: split amthif client init from end of clients enumerationAlexander Usyskin2016-02-077-23/+15Star
* | mei: hbm: send immediate reply flag in enum requestAlexander Usyskin2016-02-074-5/+32
* | mei: bus: run rescan on me_clients list changeAlexander Usyskin2016-02-074-1/+20
* | mei: drop reserved host client idsAlexander Usyskin2016-02-077-24/+11Star
* | mei: hbm: warn about fw-initiated disconnectAlexander Usyskin2016-02-072-1/+4
linux.git/commit/drivers/ide/pci/slc90e66.c?id=1da177e4c3f41524e886b7f1b8a0c1fc7321cac2'>1da177e4c3f4
8c91abf86280 ^
1c54a93d4de3 ^
8c91abf86280 ^
1da177e4c3f4



8c91abf86280 ^




1da177e4c3f4
1c54a93d4de3 ^

1da177e4c3f4

f454cbe8cd38 ^
1da177e4c3f4
36501650ec45 ^
bfa14b42a3bd ^
1da177e4c3f4
36501650ec45 ^
1da177e4c3f4
bfa14b42a3bd ^



ac95beedf8bc ^




1da177e4c3f4
856204360643 ^
ced3ec8aa7d0 ^
5749c847405d ^
ac95beedf8bc ^
4099d1432214 ^
5f8b6c34854a ^


1da177e4c3f4



6cdf6eb357c2 ^
1da177e4c3f4

9cbcc5e3c5d2 ^

1da177e4c3f4



a9ab09e26055 ^
1da177e4c3f4


64b0fed31d67 ^
feb22b7f8e62 ^

1da177e4c3f4

82ab1eeceba6 ^
1da177e4c3f4
a9ab09e26055 ^
1da177e4c3f4

64b0fed31d67 ^

a9ab09e26055 ^
64b0fed31d67 ^

1da177e4c3f4
64b0fed31d67 ^
1da177e4c3f4



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
  
                                                               
                                                                         
  
                                                             



                                                 


                         
                      
                      

                       

                           

                                      
                                                                   
 
                                              
                                                        
                                                




                                                              
                        
                                                   
                                        




                                                    
 
                                                 
                                                             




                                                            
                                           
                                           
                       


                                       

                                                    
                 
                                                                   


                                                                           
                

                                       
                                                     
                                               
                 
                                                                                



                                                                   
                                                      

 
                                                                     
 
                                              
                                                        
                                                              









                                                             
                                   

                                                                   








                                                                           
                                                      
                       
 



                                                                           




                                                                  
 

                                                  

 
                                                 
 
                                                    
                                                         
 
                                                
 



                                                                




                                                        
 
                                                                    
                                   
                                                                     
                                             
                                   


                                           



                                                                                           
                                                              

 

                                                                



                                           
                                                


                                            
                                         

                                          

  
                                         
 
                                                             

 

                                          
                                                    

 
                               
                               



                                                         
/*
 *  Copyright (C) 2000-2002 Andre Hedrick <andre@linux-ide.org>
 *  Copyright (C) 2006-2007 MontaVista Software, Inc. <source@mvista.com>
 *
 * This is a look-alike variation of the ICH0 PIIX4 Ultra-66,
 * but this keeps the ISA-Bridge and slots alive.
 *
 */

#include <linux/types.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/pci.h>
#include <linux/ide.h>
#include <linux/init.h>

#define DRV_NAME "slc90e66"

static DEFINE_SPINLOCK(slc90e66_lock);

static void slc90e66_set_pio_mode(ide_drive_t *drive, const u8 pio)
{
	ide_hwif_t *hwif	= drive->hwif;
	struct pci_dev *dev	= to_pci_dev(hwif->dev);
	int is_slave		= drive->dn & 1;
	int master_port		= hwif->channel ? 0x42 : 0x40;
	int slave_port		= 0x44;
	unsigned long flags;
	u16 master_data;
	u8 slave_data;
	int control = 0;
				     /* ISP  RTC */
	static const u8 timings[][2] = {
					{ 0, 0 },
					{ 0, 0 },
					{ 1, 0 },
					{ 2, 1 },
					{ 2, 3 }, };

	spin_lock_irqsave(&slc90e66_lock, flags);
	pci_read_config_word(dev, master_port, &master_data);

	if (pio > 1)
		control |= 1;	/* Programmable timing on */
	if (drive->media == ide_disk)
		control |= 4;	/* Prefetch, post write */
	if (ide_pio_need_iordy(drive, pio))
		control |= 2;	/* IORDY */
	if (is_slave) {
		master_data |=  0x4000;
		master_data &= ~0x0070;
		if (pio > 1) {
			/* Set PPE, IE and TIME */
			master_data |= control << 4;
		}
		pci_read_config_byte(dev, slave_port, &slave_data);
		slave_data &= hwif->channel ? 0x0f : 0xf0;
		slave_data |= ((timings[pio][0] << 2) | timings[pio][1]) <<
			       (hwif->channel ? 4 : 0);
	} else {
		master_data &= ~0x3307;
		if (pio > 1) {
			/* enable PPE, IE and TIME */
			master_data |= control;
		}
		master_data |= (timings[pio][0] << 12) | (timings[pio][1] << 8);
	}
	pci_write_config_word(dev, master_port, master_data);
	if (is_slave)
		pci_write_config_byte(dev, slave_port, slave_data);
	spin_unlock_irqrestore(&slc90e66_lock, flags);
}

static void slc90e66_set_dma_mode(ide_drive_t *drive, const u8 speed)
{
	ide_hwif_t *hwif	= drive->hwif;
	struct pci_dev *dev	= to_pci_dev(hwif->dev);
	u8 maslave		= hwif->channel ? 0x42 : 0x40;
	int sitre = 0, a_speed	= 7 << (drive->dn * 4);
	int u_speed = 0, u_flag = 1 << drive->dn;
	u16			reg4042, reg44, reg48, reg4a;

	pci_read_config_word(dev, maslave, &reg4042);
	sitre = (reg4042 & 0x4000) ? 1 : 0;
	pci_read_config_word(dev, 0x44, &reg44);
	pci_read_config_word(dev, 0x48, &reg48);
	pci_read_config_word(dev, 0x4a, &reg4a);

	if (speed >= XFER_UDMA_0) {
		u_speed = (speed - XFER_UDMA_0) << (drive->dn * 4);

		if (!(reg48 & u_flag))
			pci_write_config_word(dev, 0x48, reg48|u_flag);
		/* FIXME: (reg4a & a_speed) ? */
		if ((reg4a & u_speed) != u_speed) {
			pci_write_config_word(dev, 0x4a, reg4a & ~a_speed);
			pci_read_config_word(dev, 0x4a, &reg4a);
			pci_write_config_word(dev, 0x4a, reg4a|u_speed);
		}
	} else {
		const u8 mwdma_to_pio[] = { 0, 3, 4 };
		u8 pio;

		if (reg48 & u_flag)
			pci_write_config_word(dev, 0x48, reg48 & ~u_flag);
		if (reg4a & a_speed)
			pci_write_config_word(dev, 0x4a, reg4a & ~a_speed);

		if (speed >= XFER_MW_DMA_0)
			pio = mwdma_to_pio[speed - XFER_MW_DMA_0];
		else
			pio = 2; /* only SWDMA2 is allowed */

		slc90e66_set_pio_mode(drive, pio);
	}
}

static u8 slc90e66_cable_detect(ide_hwif_t *hwif)
{
	struct pci_dev *dev = to_pci_dev(hwif->dev);
	u8 reg47 = 0, mask = hwif->channel ? 0x01 : 0x02;

	pci_read_config_byte(dev, 0x47, &reg47);

	/* bit[0(1)]: 0:80, 1:40 */
	return (reg47 & mask) ? ATA_CBL_PATA40 : ATA_CBL_PATA80;
}

static const struct ide_port_ops slc90e66_port_ops = {
	.set_pio_mode		= slc90e66_set_pio_mode,
	.set_dma_mode		= slc90e66_set_dma_mode,
	.cable_detect		= slc90e66_cable_detect,
};

static const struct ide_port_info slc90e66_chipset __devinitdata = {
	.name		= DRV_NAME,
	.enablebits	= { {0x41, 0x80, 0x80}, {0x43, 0x80, 0x80} },
	.port_ops	= &slc90e66_port_ops,
	.pio_mask	= ATA_PIO4,
	.swdma_mask	= ATA_SWDMA2_ONLY,
	.mwdma_mask	= ATA_MWDMA12_ONLY,
	.udma_mask	= ATA_UDMA4,
};

static int __devinit slc90e66_init_one(struct pci_dev *dev, const struct pci_device_id *id)
{
	return ide_pci_init_one(dev, &slc90e66_chipset, NULL);
}

static const struct pci_device_id slc90e66_pci_tbl[] = {
	{ PCI_VDEVICE(EFAR, PCI_DEVICE_ID_EFAR_SLC90E66_1), 0 },
	{ 0, },
};
MODULE_DEVICE_TABLE(pci, slc90e66_pci_tbl);

static struct pci_driver slc90e66_pci_driver = {
	.name		= "SLC90e66_IDE",
	.id_table	= slc90e66_pci_tbl,
	.probe		= slc90e66_init_one,
	.remove		= ide_pci_remove,
	.suspend	= ide_pci_suspend,
	.resume		= ide_pci_resume,
};

static int __init slc90e66_ide_init(void)
{
	return ide_pci_register_driver(&slc90e66_pci_driver);
}

static void __exit slc90e66_ide_exit(void)
{
	pci_unregister_driver(&slc90e66_pci_driver);
}

module_init(slc90e66_ide_init);
module_exit(slc90e66_ide_exit);

MODULE_AUTHOR("Andre Hedrick");
MODULE_DESCRIPTION("PCI driver module for SLC90E66 IDE");
MODULE_LICENSE("GPL");