/*文件名:followking/include/asm/io.h
*本文件改写linux-0.11/inlcude/asm/io.h,目的是为了体验整个系统构建的过程。
*作者:hk0625
*开始时间: 2010年03月28号星期天 15:22
*完成时间: 2010年03月28号星期天 15:42(完成)
*最后修改时间: 2010年03月29号星期一 11:50
*调试完成时间: 2010年04月09日星期五 18:19
*地点:北京化工大学郁夫图书馆文法阅览室小圆桌
*Email: [email protected]
*下面let's try!
*/
//端口字节输出宏函数。
#define outb(value, port) /
__asm__ volatile ("outb %%al, %%dx"::"a"(value), "d"(port))
//端口字节输入宏函数。
//这里有一些疑问,最后_v作用是什么?
//返回值,2010年04月09日星期五 18:00
#define inb(port) ({ /
unsigned char _v; /
__asm__ volatile ("inb %%dx, %%al":"=a" (_v):"d" (port)); /
_v; /
})
//带延迟的端口字节输出宏函数。
#define outb_p(value, port) /
__asm__ volatile ("outb %%al, %%dx/n" /
"/tjmp 1f/n" /
"1:/tjmp 1f/n" /
"1:"::"a"(value), "d" (port))
//带延迟的端口字节输入宏函数。
#define inb_p(port) ({ /
unsigned char _v; /
__asm__ volatile ("inb %%dx, %%al/n" /
"/tjmp 1f/n" /
"1:/tjmp 1f/n" /
"1:":"=a" (_v):"d" (port)); /
_v; /
})
void init_8259(void)
{
outb_p(0x11, 0x20);
outb_p(0x11, 0xA0);
outb_p(0x20, 0x21);
outb_p(0x28, 0xA1);
outb_p(0x04, 0x21);
outb_p(0x02, 0xA1);
outb_p(0x01, 0x21);
outb_p(0x01, 0xA1);
outb_p(0xff, 0x21);
outb_p(0xff, 0xA1);
}