diff --git a/tools/firewire/decode-fcp.c b/tools/firewire/decode-fcp.c
index cb9a31b..b6b3725 100644
--- a/tools/firewire/decode-fcp.c
+++ b/tools/firewire/decode-fcp.c
@@ -158,12 +158,12 @@
 };
 
 struct avc_frame {
-    unsigned int operand0 : 8;
-    unsigned int opcode : 8;
-    unsigned int subunit_id : 3;
-    unsigned int subunit_type : 5;
-    unsigned int ctype : 4;
-    unsigned int cts : 4;
+    uint32_t operand0:8;
+    uint32_t opcode:8;
+    uint32_t subunit_id:3;
+    uint32_t subunit_type:5;
+    uint32_t ctype:4;
+    uint32_t cts:4;
 };
 
 static void
diff --git a/tools/firewire/nosy-dump.c b/tools/firewire/nosy-dump.c
index 64e5ea4..0bad0a4 100644
--- a/tools/firewire/nosy-dump.c
+++ b/tools/firewire/nosy-dump.c
@@ -46,7 +46,7 @@
 };
 
 static void
-print_packet(unsigned long *data, size_t length);
+print_packet(uint32_t *data, size_t length);
 static void
 decode_link_packet(struct link_packet *packet, size_t length,
 		   int include_flags, int exclude_flags);
@@ -151,7 +151,7 @@
 }
 
 struct subaction *
-subaction_create(unsigned long *data, size_t length)
+subaction_create(uint32_t *data, size_t length)
 {
   struct subaction *sa;
 
@@ -247,9 +247,9 @@
 
   if (option_verbose) {
     list_for_each_entry(sa, &t->request_list, link)
-      print_packet((unsigned long *) &sa->packet, sa->length);
+      print_packet((uint32_t *) &sa->packet, sa->length);
     list_for_each_entry(sa, &t->response_list, link)
-      print_packet((unsigned long *) &sa->packet, sa->length);
+      print_packet((uint32_t *) &sa->packet, sa->length);
   }
   printf("\r\n");
 
@@ -506,7 +506,7 @@
 };
 
 int
-handle_packet(unsigned long *data, size_t length)
+handle_packet(uint32_t *data, size_t length)
 {
   if (length == 0) {
     printf("bus reset\r\n");
@@ -642,8 +642,8 @@
 
 unsigned int get_bits(struct link_packet *packet, int offset, int width)
 {
-  unsigned long *data = (unsigned long *) packet;
-  unsigned long index, shift, mask;
+  uint32_t *data = (uint32_t *) packet;
+  uint32_t index, shift, mask;
 
   index = offset / 32 + 1;
   shift = 32 - (offset & 31) - width;
@@ -703,7 +703,7 @@
       offset = f->offset;
 
     if (f->value_names != NULL) {
-      unsigned long bits;
+      uint32_t bits;
 
       bits = get_bits(packet, offset, f->width);
       printf("%s", f->value_names[bits]);
@@ -741,18 +741,18 @@
 }
 
 static void
-print_packet(unsigned long *data, size_t length)
+print_packet(uint32_t *data, size_t length)
 {
   int i;
 
-  printf("%6lu  ", data[0]);
+  printf("%6u  ", data[0]);
 
   if (length == 4)
     printf("bus reset");
   else if (length < sizeof(struct phy_packet)) {
     printf("short packet: ");
     for (i = 1; i < length / 4; i++)
-      printf("%s%08lx", i == 0 ? "[" : " ", data[i]);
+      printf("%s%08x", i == 0 ? "[" : " ", data[i]);
     printf("]");
 
   }
@@ -803,7 +803,7 @@
     default:
       printf("unknown phy packet: ");
       for (i = 1; i < length / 4; i++)
-	printf("%s%08lx", i == 0 ? "[" : " ", data[i]);
+	printf("%s%08x", i == 0 ? "[" : " ", data[i]);
       printf("]");
       break;
     }
@@ -829,7 +829,7 @@
 #define CLEAR		"\033[H\033[2J"
 
 static void
-print_stats(unsigned long *data, size_t length)
+print_stats(uint32_t *data, size_t length)
 {
   static int bus_reset_count, short_packet_count, phy_packet_count;
   static int tcode_count[16];
@@ -959,8 +959,8 @@
   setvbuf(stdout, NULL, _IOLBF, BUFSIZ);
 
   if (1) {
-    unsigned long buf[128 * 1024];
-    unsigned int filter;
+    uint32_t buf[128 * 1024];
+    uint32_t filter;
     int length;
 
     filter = ~0;
@@ -968,11 +968,10 @@
       filter &= ~(1 <<TCODE_ISO_DATA);
     if (!option_cycle_start)
       filter &= ~(1 << TCODE_CYCLE_START);
-
     if (view == VIEW_STATS)
-      ioctl(fd, NOSY_IOC_FILTER, ~(1 << TCODE_CYCLE_START));
-    else
-      ioctl(fd, NOSY_IOC_FILTER, filter);
+      filter = ~(1 << TCODE_CYCLE_START);
+
+    ioctl(fd, NOSY_IOC_FILTER, filter);
 
     ioctl(fd, NOSY_IOC_START);
 
diff --git a/tools/firewire/nosy-dump.h b/tools/firewire/nosy-dump.h
index d8bcb61..60cf556 100644
--- a/tools/firewire/nosy-dump.h
+++ b/tools/firewire/nosy-dump.h
@@ -33,61 +33,63 @@
 #define SPEED_200                0x1
 #define SPEED_400                0x2
 
-struct phy_packet {
-  unsigned long timestamp;
+#include <stdint.h>
 
+struct phy_packet {
+  uint32_t timestamp;
   union {
     struct {
-      unsigned int zero : 24;
-      unsigned int phy_id : 6;
-      unsigned int identifier : 2;
+      uint32_t zero:24;
+      uint32_t phy_id:6;
+      uint32_t identifier:2;
     } common, link_on;
+
     struct {
-      unsigned int zero : 16;
-      unsigned int gap_count : 6;
-      unsigned int set_gap_count : 1;
-      unsigned int set_root : 1;
-      unsigned int root_id : 6;
-      unsigned int identifier : 2;
+      uint32_t zero:16;
+      uint32_t gap_count:6;
+      uint32_t set_gap_count:1;
+      uint32_t set_root:1;
+      uint32_t root_id:6;
+      uint32_t identifier:2;
     } phy_config;
+
     struct {
-      unsigned int more_packets : 1;
-      unsigned int initiated_reset : 1;
-      unsigned int port2 : 2;
-      unsigned int port1 : 2;
-      unsigned int port0 : 2;
-      unsigned int power_class : 3;
-      unsigned int contender : 1;
-      unsigned int phy_delay : 2;
-      unsigned int phy_speed : 2;
-      unsigned int gap_count : 6;
-      unsigned int link_active : 1;
-      unsigned int extended : 1;
-      unsigned int phy_id : 6;
-      unsigned int identifier : 2;
+      uint32_t more_packets:1;
+      uint32_t initiated_reset:1;
+      uint32_t port2:2;
+      uint32_t port1:2;
+      uint32_t port0:2;
+      uint32_t power_class:3;
+      uint32_t contender:1;
+      uint32_t phy_delay:2;
+      uint32_t phy_speed:2;
+      uint32_t gap_count:6;
+      uint32_t link_active:1;
+      uint32_t extended:1;
+      uint32_t phy_id:6;
+      uint32_t identifier:2;
     } self_id;
 
     struct {
-      unsigned int more_packets : 1;
-      unsigned int reserved1 : 1;
-      unsigned int porth : 2;
-      unsigned int portg : 2;
-      unsigned int portf : 2;
-      unsigned int porte : 2;
-      unsigned int portd : 2;
-      unsigned int portc : 2;
-      unsigned int portb : 2;
-      unsigned int porta : 2;
-      unsigned int reserved0 : 2;
-      unsigned int sequence : 3;
-      unsigned int extended : 1;
-      unsigned int phy_id : 6;
-      unsigned int identifier : 2;
+      uint32_t more_packets:1;
+      uint32_t reserved1:1;
+      uint32_t porth:2;
+      uint32_t portg:2;
+      uint32_t portf:2;
+      uint32_t porte:2;
+      uint32_t portd:2;
+      uint32_t portc:2;
+      uint32_t portb:2;
+      uint32_t porta:2;
+      uint32_t reserved0:2;
+      uint32_t sequence:3;
+      uint32_t extended:1;
+      uint32_t phy_id:6;
+      uint32_t identifier:2;
     } ext_self_id;
   };
-
-  unsigned long inverted;
-  unsigned long ack;
+  uint32_t inverted;
+  uint32_t ack;
 };
 
 #define PHY_PACKET_CONFIGURATION 0x00
@@ -95,186 +97,88 @@
 #define PHY_PACKET_SELF_ID 0x02
 
 struct link_packet {
-  unsigned long timestamp;
-
+  uint32_t timestamp;
   union {
     struct {
-      unsigned int priority : 4;
-      unsigned int tcode : 4;
-      unsigned int rt : 2;
-      unsigned int tlabel : 6;
-      unsigned int destination : 16;
+      uint32_t priority:4;
+      uint32_t tcode:4;
+      uint32_t rt:2;
+      uint32_t tlabel:6;
+      uint32_t destination:16;
 
-      unsigned int offset_high : 16;
-      unsigned int source : 16;
+      uint32_t offset_high:16;
+      uint32_t source:16;
 
-      unsigned long offset_low;
+      uint32_t offset_low;
     } common;
 
     struct {
-      unsigned int priority : 4;
-      unsigned int tcode : 4;
-      unsigned int rt : 2;
-      unsigned int tlabel : 6;
-      unsigned int destination : 16;
-
-      unsigned int offset_high : 16;
-      unsigned int source : 16;
-
-      unsigned long offset_low;
-
-      unsigned long crc;
+      uint32_t common[3];
+      uint32_t crc;
     } read_quadlet;
 
     struct {
-      unsigned int priority : 4;
-      unsigned int tcode : 4;
-      unsigned int rt : 2;
-      unsigned int tlabel : 6;
-      unsigned int destination : 16;
-
-      unsigned int reserved0 : 12;
-      unsigned int rcode : 4;
-      unsigned int source : 16;
-
-      unsigned long reserved1;
-
-      unsigned long data;
- 
-      unsigned long crc; 
+      uint32_t common[3];
+      uint32_t data;
+      uint32_t crc;
     } read_quadlet_response;
 
     struct {
-      unsigned int priority : 4;
-      unsigned int tcode : 4;
-      unsigned int rt : 2;
-      unsigned int tlabel : 6;
-      unsigned int destination : 16;
-
-      unsigned int offset_high : 16;
-      unsigned int source : 16;
-
-      unsigned long offset_low;
-
-      unsigned int extended_tcode : 16;
-      unsigned int data_length : 16;
-
-      unsigned long crc;
+      uint32_t common[3];
+      uint32_t extended_tcode:16;
+      uint32_t data_length:16;
+      uint32_t crc;
     } read_block;
 
     struct {
-      unsigned int priority : 4;
-      unsigned int tcode : 4;
-      unsigned int rt : 2;
-      unsigned int tlabel : 6;
-      unsigned int destination : 16;
-
-      unsigned int reserved0 : 12;
-      unsigned int rcode : 4;
-      unsigned int source : 16;
-
-      unsigned long reserved1;
-
-      unsigned int extended_tcode : 16;
-      unsigned int data_length : 16;
-
-      unsigned long crc; 
-
-      unsigned long data[0];
-
+      uint32_t common[3];
+      uint32_t extended_tcode:16;
+      uint32_t data_length:16;
+      uint32_t crc;
+      uint32_t data[0];
       /* crc and ack follows. */
-
     } read_block_response;
 
     struct {
-      unsigned int priority : 4;
-      unsigned int tcode : 4;
-      unsigned int rt : 2;
-      unsigned int tlabel : 6;
-      unsigned int destination : 16;
-
-      unsigned int offset_high : 16;
-      unsigned int source : 16;
-
-      unsigned long offset_low;
-
-      unsigned long data;
- 
-      unsigned long crc; 
-
+      uint32_t common[3];
+      uint32_t data;
+      uint32_t crc;
     } write_quadlet;
 
     struct {
-      unsigned int priority : 4;
-      unsigned int tcode : 4;
-      unsigned int rt : 2;
-      unsigned int tlabel : 6;
-      unsigned int destination : 16;
-
-      unsigned int offset_high : 16;
-      unsigned int source : 16;
-
-      unsigned int offset_low : 32;
-
-      unsigned int extended_tcode : 16;
-      unsigned int data_length : 16;
- 
-      unsigned long crc; 
-      unsigned long data[0];
-
+      uint32_t common[3];
+      uint32_t extended_tcode:16;
+      uint32_t data_length:16;
+      uint32_t crc;
+      uint32_t data[0];
       /* crc and ack follows. */
-
     } write_block;
 
     struct {
-      unsigned int priority : 4;
-      unsigned int tcode : 4;
-      unsigned int rt : 2;
-      unsigned int tlabel : 6;
-      unsigned int destination : 16;
-
-      unsigned int reserved0 : 12;
-      unsigned int rcode : 4;
-      unsigned int source : 16;
-
-      unsigned long reserved1;
-
-      unsigned long crc; 
+      uint32_t common[3];
+      uint32_t crc;
     } write_response;
 
     struct {
-      unsigned int priority : 4;
-      unsigned int tcode : 4;
-      unsigned int rt : 2;
-      unsigned int tlabel : 6;
-      unsigned int destination : 16;
-
-      unsigned int offset_high : 16;
-      unsigned int source : 16;
-
-      unsigned long offset_low;
-
-      unsigned long data;
-
-      unsigned long crc; 
+      uint32_t common[3];
+      uint32_t data;
+      uint32_t crc;
     } cycle_start;
 
     struct {
-      unsigned int sy : 4;
-      unsigned int tcode : 4;
-      unsigned int channel : 6;
-      unsigned int tag : 2;
-      unsigned int data_length : 16;
+      uint32_t sy:4;
+      uint32_t tcode:4;
+      uint32_t channel:6;
+      uint32_t tag:2;
+      uint32_t data_length:16;
 
-      unsigned long crc;
+      uint32_t crc;
     } iso_data;
-
   };
-
 };
 
 struct subaction {
-  unsigned long ack;
+  uint32_t ack;
   size_t length;
   struct list link;
   struct link_packet packet;
