Re: This is where I'm going with fwcontrol

Sean Bruno <[email protected]>
Newsgroups gmane.os.freebsd.devel.firewire
Message-ID <[email protected]>
Dieter wrote:
> While looking at the code and wondering what "adjust_gap_count"
> had to do with cyclemaster mode, I noticed that -f was setting
> the 2nd argument to
> send_phy_config(int fd, int root_node, int gap_count)
> which is root_node, not gap_count.
>
> I also noticed that send_phy_config() does (root_node & 0x3f),
> so having the range check be 0x3f rather than INT32_MAX
> seems to make sense.
>
>   
Agreed, the root_node should be checked against 0x3f(or a define that is 
assigned the value of 0x3f ... whatever that really is).
> I haven't yet figured out exactly which 7 bits this stuff is
> actually setting.
>
>   
send_phy_config() is causing the /dev/fwX device to generate a PHY 
configuration Packet(IEEE 1394-1995 4.3.4.3)
<snippet from document>
It is possible to optimize Serial Bus performance for particular 
configurations in the following ways:
     a)   Setting the gap_count used by all nodes to a smaller value 
(appropriate to the actual worst-case number of
          hops between any two nodes)
     b)   Forcing a particular node to be the root after the next bus 
initialization (for example, in isochronous systems,
          the root shall be cycle-master capable)
Both of these actions shall be done for remote nodes using the PHY 
configuration packet shown in figure 4.20. (For the
local node, the PH_CONT.request service is used) The procedures for 
using this PHY packet are described in clause
7.3.5.2.1.
<end snippet>

So, I think you are correct adjust_gap_count should become set_root_node 
as that is what it does.

A PHY Config packet should look like this:
Message ID  Root ID  R T Gap Count
   00(2 bits)  (5 bits)    1 1    (6 bits)
 
So the Root ID(-f in fwcontrol) can't be set to a value greater than 
0x3f(63) and the Gap Count can't be greater than 0x7f(127).  An "R" 
value of 1 means that this is a message to set the root ID.  An "T" 
value of 1 means that this is a message to set the gap count for all 
nodes.  If "R" and "T" are both 0, then the message is ignored.



> So does the following look like an improvement (however minor)
> to anyone else, or just me?  :-)
>
>
> @@ -730,7 +730,7 @@
>         bool dump_phy_reg = false;
>  
>         int32_t priority_budget = -1;
> -       int32_t adjust_gap_count = -1;
> +       int32_t set_root_node = -1;
>         int32_t reset_gap_count = -1;
>         int32_t send_link_on = -1;
>         int32_t send_reset_start = -1;
> @@ -790,9 +790,9 @@
>                         display_board_only = false;
>                         break;
>                 case 'f':
> -                       adjust_gap_count = strtol(optarg, NULL, 0);
> -                       if ( (adjust_gap_count < 0) || (adjust_gap_count > INT32_MAX) )
> -                               err(EX_USAGE, "%s:adjust_gap_count out of range", __func__);
> +                       set_root_node = strtol(optarg, NULL, 0);
> +                       if ( (set_root_node < 0) || (set_root_node > 0x3f) )
> +                               err(EX_USAGE, "%s:set_root_node out of range", __func__);
>                         open_needed = true;
>                         command_set = true;
>                         display_board_only = false;
> @@ -961,8 +961,8 @@
>         /*
>          * Adjust the gap count for this card/bus to value "-f"
>          */
> -       if (adjust_gap_count >= 0)
> -               send_phy_config(fd, adjust_gap_count, -1);
> +       if (set_root_node >= 0)
> +               send_phy_config(fd, set_root_node, -1);
>  
>         /*
>          * Reset the gap count for this card/bus  "-g"
>   
I will chew on and implement this patch tomorrow I think.  It makes 
sense to me, it's just the code in send_phy_config() that is distracting.

I hope this clarifies what this crap means!  :)

-- 
Sean Bruno
MiraLink Corporation
6015 NE 80th Ave, Ste 100
Portland, OR 97218
Phone 503-621-5143
Fax 503-621-5199
MSN: [email protected]
Google:  [email protected]
Yahoo:  [email protected]

_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-firewire
To unsubscribe, send any mail to "[email protected]"
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.