Beispiel #1
0
void pci_int_set(unsigned char u8bus, unsigned char u8dev, unsigned char u8fun, unsigned char u8reg, unsigned int u32data)
{
	unsigned int   u32addr=0;
	u32addr = u8reg | (u8fun << 8) | (u8dev << 11) | (u8bus << 16) | 0x80000000;
	
	io_int_set(0x0cf8, u32addr); 
	io_int_set(0x0cfc, u32data); 
	
}
Beispiel #2
0
void pci_byte_set(unsigned char u8bus, unsigned char u8dev, unsigned char u8fun, unsigned char u8reg, unsigned char u8data)

{
	unsigned int   u32addr=0,u32data=0;
	u32addr = u8reg | (u8fun << 8) | (u8dev << 11) | (u8bus << 16) | 0x80000000;
		
	io_int_set(0x0cf8, u32addr); 
	u32data = io_int_get((unsigned short int) 0x0cfc); 
	u32data = (u32data&0xffffff00) | u8data;
	io_int_set(0x0cfc, u32data); 
}
Beispiel #3
0
unsigned int pci_int_get(unsigned char u8bus, unsigned char u8dev, unsigned char u8fun, unsigned char u8reg)
{
	unsigned int   u32addr=0,u32data=0;
	u32addr = u8reg | (u8fun << 8) | (u8dev << 11) | (u8bus << 16) | 0x80000000;
	
	io_int_set(0x0cf8, u32addr); 	
	u32data = io_int_get((unsigned short int) 0x0cfc); 	
	
	return u32data;
}
Beispiel #4
0
// -----------------------------------------------------------------------
void cchar_int_report(struct cchar_chan_t *chan)
{
	// if interrupt is reported and not yet served, there's nothing to do, for now
	pthread_mutex_lock(&chan->int_mutex);
	if (chan->int_reported != -1) {
		pthread_mutex_unlock(&chan->int_mutex);
		return;
	}
	pthread_mutex_unlock(&chan->int_mutex);

	// check if any unit reported interrupt
	for (int unit_n=0 ; unit_n<CCHAR_MAX_DEVICES ; unit_n++) {
		pthread_mutex_lock(&chan->int_mutex);
		if ((chan->int_unit[unit_n] != CCHAR_INT_NONE) && !chan->int_mask) {
			chan->int_reported = unit_n;
			pthread_mutex_unlock(&chan->int_mutex);
			LOG(L_CCHR, "CCHAR (ch:%i) reporting interrupt %i", chan->num, chan->num + 12);
			io_int_set(chan->num);
			break;
		} else {
			pthread_mutex_unlock(&chan->int_mutex);
		}
	}
}