+int
+pxmc_fpga_is_mark(pxmc_state_t *mcs)
+{
+ int chan = mcs->pxms_out_info;
+
+ return *fpga_irc_state[chan] & 1;
+}
+
+int pxmc_fpga_hh_gd10(pxmc_state_t *mcs);
+int pxmc_fpga_hh_gd20(pxmc_state_t *mcs);
+
+int
+pxmc_fpga_hh_gi(pxmc_state_t *mcs)
+{
+ long spd;
+ pxmc_set_flag(mcs,PXMS_BSY_b);
+ mcs->pxms_rsfg = 0;
+ spd = mcs->pxms_ms;
+ spd >>= mcs->pxms_cfg&PXMS_CFG_HSPD_m;
+ if(!spd) spd = 1;
+ if(mcs->pxms_cfg & PXMS_CFG_HDIR_m)
+ spd = -spd;
+ mcs->pxms_gen_hsp = spd;
+ mcs->pxms_do_gen = pxmc_fpga_hh_gd10;
+ return pxmc_fpga_hh_gd10(mcs);
+}
+
+int
+pxmc_fpga_hh_gd10(pxmc_state_t *mcs)
+{
+ long spd;
+ if(mcs->pxms_flg & PXMS_ERR_m)
+ return pxmc_spdnext_gend(mcs);
+
+ pxmc_spd_gacc(&(mcs->pxms_rs), mcs->pxms_gen_hsp, mcs->pxms_ma);
+ mcs->pxms_rp += mcs->pxms_rs;
+
+ if (!pxmc_fpga_is_mark(mcs)){
+ spd=mcs->pxms_gen_hsp;
+ if (spd > 0){
+ spd >>= 2;
+ spd = spd? -spd: -1;
+ } else {
+ spd >>= 2;
+ spd= spd? -spd: 1;
+ }
+ mcs->pxms_gen_hsp = spd;
+ mcs->pxms_do_gen = pxmc_fpga_hh_gd20;
+ }
+
+ return 0;
+}
+
+int
+pxmc_fpga_hh_gd20(pxmc_state_t *mcs)
+{
+ if (mcs->pxms_flg & PXMS_ERR_m)
+ return pxmc_spdnext_gend(mcs);
+
+ pxmc_spd_gacc(&(mcs->pxms_rs), mcs->pxms_gen_hsp, mcs->pxms_ma);
+ mcs->pxms_rp += mcs->pxms_rs;
+
+ if (pxmc_fpga_is_mark(mcs)){
+ /* pxmc_axis_set_pos(mcs, 0); */
+ if (mcs->pxms_do_ap2hw != NULL)
+ mcs->pxms_do_ap2hw(mcs);
+ mcs->pxms_do_gen = pxmc_stop_gi;
+ }
+
+ return 0;
+}
+