8259芯片的初始化-在重现linux-0.11遇到的问题 (博古以通今)

/*文件名: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);
}

 

 

你可能感兴趣的:(8259芯片的初始化-在重现linux-0.11遇到的问题 (博古以通今))