Implementation of the AGENT_STATE Register

Hidetoshi Shimokawa simokawa at FreeBSD.ORG
Wed Mar 5 02:13:36 UTC 2008


Sorry for the late response.

On Sat, Feb 9, 2008 at 6:06 AM, Sean Bruno <sbruno at miralink.com> wrote:
> Hidetoshi:
>
>  Can you review this and correct it where needed?  I am sure that it is
>  wrong, but I haven't tested it yet.
>
>
>  struct agent_state {
>         uint32_t fetch_agent_state;
>  #define AGENT_STATE_RESET 0
>  #define AGENT_STATE_ACTIVE 1
>  #define AGENT_STATE_SUSPENDED 2
>  #define AGENT_STATE_DEAD 3
>         uint32_t bus_reset_command_reset_init_vals;
>         uint32_t read_vals;
>         uint32_t write_effects;
>
> };
>
>  static void
>  sbp_targ_send_agent_state(struct fw_xfer *xfer)
>  {
>         struct agent_state *current_state;
>         struct fw_pkt *rfp; /* response to request --> from target */
>
>         xfer->send.payload = malloc(sizeof(struct agent_state),
>
> M_SBP_TARG, M_NOWAIT | M_ZERO);
>         xfer->send.pay_len = ntohs(sizeof(struct agent_state));

I don't think you need ntohs() here.

>         xfer->send.spd = FWSPD_S400;
>
>         current_state = (struct agent_state *)xfer->send.payload;
>
>         current_state->fetch_agent_state = AGENT_STATE_ACTIVE;

I'm not sure whether byteswapping is required here or not.

>         rfp = &xfer->recv.hdr;
>
>         rfp->mode.rresb.tcode = FWTCODE_RRESB;
>         rfp->mode.rresb.rtcode = 0;
>         rfp->mode.rresb.extcode = 0;
>         xfer->send.hdr.mode.hdr.dst = ntohs(rfp->mode.hdr.src);
>
>
>         xfer->hand = fw_xfer_free_buf;
>         rfp->mode.hdr.pri = 0;
>         fw_asyreq(xfer->fc, -1, xfer);
>
>  }
>
>
>  Sean
>
>



-- 
/\ Hidetoshi Shimokawa
\/ simokawa at FreeBSD.ORG


More information about the freebsd-firewire mailing list