drivers/scsi/script_asm.pl
Source file repositories/reference/linux-study-clean/drivers/scsi/script_asm.pl
File Facts
- System
- Linux kernel
- Corpus path
drivers/scsi/script_asm.pl- Extension
.pl- Size
- 28507 bytes
- Lines
- 972
- Domain
- Driver Families
- Bucket
- drivers/scsi
- Inferred role
- Driver Families: drivers/scsi
- Status
- atlas-only
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
Dependency Surface
- No C-style include directives detected by the generator.
Detected Declarations
- No top-level syscall, struct, function, initcall, or export declaration detected by the generator.
Annotated Snippet
if ($debug) {
print STDERR "Patching $address at offset $offset, length $length to $value\n";
printf STDERR "Old code : %08x\n", $code[$address];
}
$mask = ($inverted_masks[$length] << ($offset * 8));
$code[$address] = ($code[$address] & ~$mask) |
(($code[$address] & $mask) + ($value << ($offset * 8)) &
$mask);
printf STDERR "New code : %08x\n", $code[$address] if ($debug);
}
# &parse_value($value, $word, $offset, $length) where $value is
# an identifier or constant, $word is the word offset relative to
# $address, $offset is the starting byte within that word, and
# $length is the length of the field in bytes.
#
# Side effects are that the bytes are combined into the @code array
# relative to $address, and that the %symbol_references table is
# updated as appropriate.
sub parse_value {
local ($value, $word, $offset, $length) = @_;
local ($tmp);
$symbol = '';
if ($value =~ /^REL\s*\(\s*($identifier)\s*\)\s*(.*)/i) {
$relative = 'REL';
$symbol = $1;
$value = $2;
print STDERR "Relative reference $symbol\n" if ($debug);
} elsif ($value =~ /^($identifier)\s*(.*)/) {
$relative = 'ABS';
$symbol = $1;
$value = $2;
print STDERR "Absolute reference $symbol\n" if ($debug);
}
if ($symbol ne '') {
print STDERR "Referencing symbol $1, length = $length in $_\n" if ($debug);
$tmp = ($address + $word) * 4 + $offset;
if ($symbol_references{$symbol} ne undef) {
$symbol_references{$symbol} =
"$symbol_references{$symbol} $relative,$tmp,$length";
} else {
if (!defined($symbol_values{$symbol})) {
print STDERR "forward $1\n" if ($debug_external);
$forward{$symbol} = "line $lineno : $_";
}
$symbol_references{$symbol} = "$relative,$tmp,$length";
}
}
$value = eval $value;
&patch ($address + $word, $offset, $length, $value);
}
# &parse_conditional ($conditional) where $conditional is the conditional
# clause from a transfer control instruction (RETURN, CALL, JUMP, INT).
sub parse_conditional {
local ($conditional) = @_;
if ($conditional =~ /^\s*(IF|WHEN)\s*(.*)/i) {
$if = $1;
$conditional = $2;
if ($if =~ /WHEN/i) {
$allow_atn = 0;
Annotation
- Atlas domain: Driver Families / drivers/scsi.
- Implementation status: atlas-only.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.