@@ -274,6 +274,7 @@ def map_regs():
274274
275275 # Intel Audio DSP Registers
276276 global bar4_mmap
277+ global bar4_mem
277278 (bar4_mem , bar4_mmap ) = bar_map (pcidir , 4 )
278279 dsp = Regs (bar4_mem )
279280 if adsp_is_ace ():
@@ -667,14 +668,24 @@ def win_read(base, start, length):
667668 log .error ("bar4_mmap.size()=%d" , bar4_mmap .size ())
668669 raise ie
669670
670- def win_hdr (base ):
671- return struct .unpack ("<IIII" , win_read (base , 0 , 16 ))
671+ def winstream_reg_hdr (base ):
672+ hdr = Regs (bar4_mem + base )
673+ hdr .WLEN = 0x00
674+ hdr .START = 0x04
675+ hdr .END = 0x08
676+ hdr .SEQ = 0x0c
677+ hdr .freeze ()
678+ return hdr
679+
680+ def win_hdr (hdr ):
681+ return ( hdr .WLEN , hdr .START , hdr .END , hdr .SEQ )
672682
673683# Python implementation of the same algorithm in sys_winstream_read(),
674684# see there for details.
675685def winstream_read (base , last_seq ):
676686 while True :
677- (wlen , start , end , seq ) = win_hdr (base )
687+ hdr = winstream_reg_hdr (base )
688+ (wlen , start , end , seq ) = win_hdr (hdr )
678689 if wlen > SHELL_MAX_VALID_SLOT_SIZE :
679690 log .debug ("DSP powered off at winstream_read" )
680691 return (seq , "" )
@@ -692,7 +703,7 @@ def winstream_read(base, last_seq):
692703 result = win_read (base , 16 + copy , suffix )
693704 if suffix < behind :
694705 result += win_read (base , 16 , behind - suffix )
695- (wlen , start1 , end , seq1 ) = win_hdr (base )
706+ (wlen , start1 , end , seq1 ) = win_hdr (hdr )
696707 if start1 == start and seq1 == seq :
697708 # Best effort attempt at decoding, replacing unusable characters
698709 # Found to be useful when it really goes wrong
@@ -709,7 +720,8 @@ def idx_sub(wlen, a, b):
709720# Python implementation of the same algorithm in sys_winstream_write(),
710721# see there for details.
711722def winstream_write (base , msg ):
712- (wlen , start , end , seq ) = win_hdr (base )
723+ hdr = winstream_reg_hdr (base )
724+ (wlen , start , end , seq ) = win_hdr (hdr )
713725 if wlen > SHELL_MAX_VALID_SLOT_SIZE :
714726 log .debug ("DSP powered off at winstream_write" )
715727 return
@@ -724,9 +736,9 @@ def winstream_write(base, msg):
724736 if seq != 0 :
725737 avail = (wlen - 1 ) - idx_sub (wlen , end , start )
726738 if lenmsg > avail :
727- start = idx_mod (wlen , start + (lenmsg - avail ))
739+ hdr . START = idx_mod (wlen , start + (lenmsg - avail ))
728740 if lenmsg < lenmsg0 :
729- start = end
741+ hdr . START = end
730742 drop = lenmsg0 - lenmsg
731743 msg = msg [drop : lenmsg - drop ]
732744 suffix = min (lenmsg , wlen - end )
@@ -735,15 +747,8 @@ def winstream_write(base, msg):
735747 if lenmsg > suffix :
736748 for c in range (0 , lenmsg - suffix ):
737749 bar4_mmap [base + 16 + c ] = msg [suffix + c ]
738- end = idx_mod (wlen , end + lenmsg )
739- seq += lenmsg0
740- # write back updated fields as 32bit writes
741- update_hdr = struct .pack ("<III" , start , end , seq )
742- dst = base + 4 # skip wlen
743- for c in range (0 , 3 ):
744- src = c * 4
745- bar4_mmap [dst : dst + 4 ] = update_hdr [src : src + 4 ]
746- dst += 4
750+ hdr .END = idx_mod (wlen , end + lenmsg )
751+ hdr .SEQ += lenmsg0
747752
748753def debug_offset ():
749754 ( base , stride ) = adsp_mem_window_config ()
0 commit comments