}case2:/* KMIDATA */if(s->pending)s->last=ps2_read_data(s->dev);returns->last;case3:/* KMICLKDIV */returns->clk;case4:/* KMIIR */returns->pending|2;default:cpu_abort(cpu_single_env,"pl050_read: Bad offset %x\n",offset);return0;}}staticvoidpl050_write(void*opaque,target_phys_addr_toffset,uint32_tvalue){pl050_state*s=(pl050_state*)opaque;offset-=s->base;switch(offset>>2){case0:/* KMICR */s->cr=value;pl050_update(s,s->pending);/* ??? Need to implement the enable/disable bit. */break;case2:/* KMIDATA *//* ??? This should toggle the TX interrupt line. *//* ??? This means kbd/mouse can block each other. */if(s->is_mouse){ps2_write_mouse(s->dev,value);}else{ps2_write_keyboard(s->dev,value);}break;case3:/* KMICLKDIV */s->clk=value;return;default:cpu_abort(cpu_single_env,"pl050_write: Bad offset %x\n",offset);}}staticCPUReadMemoryFunc*pl050_readfn[]={pl050_read,pl050_read,pl050_read};staticCPUWriteMemoryFunc*pl050_writefn[]={pl050_write,pl050_write,pl050_write};