static void mfc3_data_reverse(struct parport *p) { DPRINTK(KERN_DEBUG "reverse\n"); pia(p)->crb &= ~PIA_DDR; /* make data direction register visible */ pia(p)->pddrb = 0; /* all pins input */ pia(p)->crb |= PIA_DDR; /* make data register visible - default */ }
static void mfc3_data_forward(struct parport *p) { DPRINTK(KERN_DEBUG "forward\n"); pia(p)->crb &= ~PIA_DDR; /* make data direction register visible */ pia(p)->pddrb = 255; /* all pins output */ pia(p)->crb |= PIA_DDR; /* make data register visible - default */ }
static void mfc3_write_data(struct parport *p, unsigned char data) { DPRINTK(KERN_DEBUG "write_data %c\n",data); dummy = pia(p)->pprb; /* clears irq bit */ /* Triggers also /STROBE.*/ pia(p)->pprb = data; }
static irqreturn_t mfc3_interrupt(int irq, void *dev_id) { int i; for( i = 0; i < MAX_MFC; i++) if (this_port[i] != NULL) if (pia(this_port[i])->crb & 128) { /* Board caused interrupt */ dummy = pia(this_port[i])->pprb; /* clear irq bit */ parport_generic_irq(this_port[i]); } return IRQ_HANDLED; }
inline void from_buffer(T &element, const char *buffer, std::size_t size) { boost::iostreams::array_source src(buffer, size); boost::iostreams::filtering_istream fis(src); boost::archive::portable_binary_iarchive pia(fis); pia >> element; }
static unsigned char mfc3_read_status(struct parport *p) { unsigned char status; status = status_mfc3_to_pc(pia(p)->ppra & 0x1f); DPRINTK(KERN_DEBUG "read_status %02x\n", status); return status; }
static void mfc3_restore_state(struct parport *p, struct parport_state *s) { pia(p)->pprb = s->u.amiga.data; pia(p)->crb &= ~PIA_DDR; pia(p)->pddrb = s->u.amiga.datadir; pia(p)->crb |= PIA_DDR; pia(p)->ppra = s->u.amiga.status; pia(p)->cra &= ~PIA_DDR; pia(p)->pddrb = s->u.amiga.statusdir; pia(p)->cra |= PIA_DDR; }
static void mfc3_save_state(struct parport *p, struct parport_state *s) { s->u.amiga.data = pia(p)->pprb; pia(p)->crb &= ~PIA_DDR; s->u.amiga.datadir = pia(p)->pddrb; pia(p)->crb |= PIA_DDR; s->u.amiga.status = pia(p)->ppra; pia(p)->cra &= ~PIA_DDR; s->u.amiga.statusdir = pia(p)->pddrb; pia(p)->cra |= PIA_DDR; }
// simple class with polymorphic archive compiled in dll void test2(){ const char * testfile = boost::archive::tmpnam(NULL); BOOST_REQUIRE(NULL != testfile); const A a; A a1; { test_ostream os(testfile, TEST_STREAM_FLAGS); boost::archive::polymorphic_text_oarchive oa(os, TEST_ARCHIVE_FLAGS); boost::archive::polymorphic_oarchive & poa(oa); poa << boost::serialization::make_nvp("a", a); } { test_istream is(testfile, TEST_STREAM_FLAGS); boost::archive::polymorphic_text_iarchive ia(is, TEST_ARCHIVE_FLAGS); boost::archive::polymorphic_iarchive & pia(ia); pia >> boost::serialization::make_nvp("a", a1); } BOOST_CHECK_EQUAL(a, a1); std::remove(testfile); }
static unsigned char mfc3_read_data(struct parport *p) { /* clears interrupt bit. Triggers also /STROBE. */ return pia(p)->pprb; }
static void mfc3_disable_irq(struct parport *p) { pia(p)->crb &= ~PIA_C1_ENABLE_IRQ; }
static void mfc3_enable_irq(struct parport *p) { pia(p)->crb |= PIA_C1_ENABLE_IRQ; }
/* Handled directly by hardware */; return ret; } static unsigned char control_mfc3_to_pc(unsigned char control) { unsigned char ret = PARPORT_CONTROL_STROBE | PARPORT_CONTROL_AUTOFD | PARPORT_CONTROL_SELECT; if (control & 128) /* /INITP */ ret |= PARPORT_CONTROL_INIT; if (control & 64) /* /AUTOLF */ ret &= ~PARPORT_CONTROL_AUTOFD; if (control & 32) /* /SELECT_IN */ ret &= ~PARPORT_CONTROL_SELECT; return ret; } static void mfc3_write_control(struct parport *p, unsigned char control) { DPRINTK(KERN_DEBUG "write_control %02x\n",control); pia(p)->ppra = (pia(p)->ppra & 0x1f) | control_pc_to_mfc3(control); } static unsigned char mfc3_read_control( struct parport *p) { DPRINTK(KERN_DEBUG "read_control \n"); return control_mfc3_to_pc(pia(p)->ppra & 0xe0); } static unsigned char mfc3_frob_control( struct parport *p, unsigned char mask, unsigned char val) { unsigned char old; DPRINTK(KERN_DEBUG "frob_control mask %02x, value %02x\n",mask,val); old = mfc3_read_control(p); mfc3_write_control(p, (old & ~mask) ^ val); return old; } #if 0 /* currently unused */ static unsigned char status_pc_to_mfc3(unsigned char status) { unsigned char ret = 1; if (status & PARPORT_STATUS_BUSY) /* Busy */ ret &= ~1; if (status & PARPORT_STATUS_ACK) /* Ack */ ret |= 8; if (status & PARPORT_STATUS_PAPEROUT) /* PaperOut */ ret |= 2; if (status & PARPORT_STATUS_SELECT) /* select */ ret |= 4; if (status & PARPORT_STATUS_ERROR) /* error */ ret |= 16; return ret; } #endif static unsigned char status_mfc3_to_pc(unsigned char status) { unsigned char ret = PARPORT_STATUS_BUSY; if (status & 1) /* Busy */ ret &= ~PARPORT_STATUS_BUSY; if (status & 2) /* PaperOut */ ret |= PARPORT_STATUS_PAPEROUT; if (status & 4) /* Selected */ ret |= PARPORT_STATUS_SELECT; if (status & 8) /* Ack */ ret |= PARPORT_STATUS_ACK; if (status & 16) /* /ERROR */ ret |= PARPORT_STATUS_ERROR; return ret; } #if 0 /* currently unused */ static void mfc3_write_status( struct parport *p, unsigned char status) { DPRINTK(KERN_DEBUG "write_status %02x\n",status); pia(p)->ppra = (pia(p)->ppra & 0xe0) | status_pc_to_mfc3(status); }
static unsigned char mfc3_read_control( struct parport *p) { DPRINTK(KERN_DEBUG "read_control \n"); return control_mfc3_to_pc(pia(p)->ppra & 0xe0); }
static void mfc3_write_control(struct parport *p, unsigned char control) { DPRINTK(KERN_DEBUG "write_control %02x\n",control); pia(p)->ppra = (pia(p)->ppra & 0x1f) | control_pc_to_mfc3(control); }