#define PrintDebug(fmt, args...)
#endif
+#ifdef DEBUG_RAMDISK
+#define Ramdisk_Print_Pic(_f, _a...) PrintTrace("\n8259a.c(%d) "_f, __LINE__, ## _a)
+#else
+#define Ramdisk_Print_Pic(_f, _a...)
+#endif
+
+
typedef enum {RESET, ICW1, ICW2, ICW3, ICW4, READY} pic_state_t;
static const uint_t MASTER_PORT1 = 0x20;
return 0;
}
+
+/*Zheng 07/30/2008*/
+
+static int pic_lower_intr(void *private_data, int irq_no) {
+
+ struct pic_internal *state = (struct pic_internal*)private_data;
+
+ Ramdisk_Print_Pic("[pic_lower_intr] IRQ line %d now low\n", (unsigned) irq_no);
+ if (irq_no <= 7) {
+
+ state->master_irr &= ~(1 << irq_no);
+ if ((state->master_irr & ~(state->master_imr)) == 0) {
+ Ramdisk_Print_Pic("\t\tFIXME: Master maybe should do sth\n");
+ }
+ } else if ((irq_no > 7) && (irq_no <= 15)) {
+
+ state->slave_irr &= ~(1 << (irq_no - 8));
+ if ((state->slave_irr & (~(state->slave_imr))) == 0) {
+ Ramdisk_Print_Pic("\t\tFIXME: Slave maybe should do sth\n");
+ }
+ }
+ return 0;
+}
+
+
+
static int pic_intr_pending(void * private_data) {
struct pic_internal * state = (struct pic_internal*)private_data;
}
*/
+
+/*Zheng 07/30/2008*/
static struct intr_ctrl_ops intr_ops = {
.intr_pending = pic_intr_pending,
.get_intr_number = pic_get_intr_number,
.raise_intr = pic_raise_intr,
.begin_irq = pic_begin_irq,
+ .lower_intr = pic_lower_intr, //Zheng added
+
};