Skip to content
This repository was archived by the owner on Dec 24, 2024. It is now read-only.

Commit 1d9db6e

Browse files
committed
eda: use device interface
1 parent 4026526 commit 1d9db6e

File tree

2 files changed

+26
-41
lines changed

2 files changed

+26
-41
lines changed

eda/server.go

Lines changed: 22 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,10 @@ type server struct {
2828
devshm string
2929
cfgdir string
3030

31+
newDevice func(devmem, odir, devshm, cfgdir string, opts ...Option) (device, error)
32+
3133
opts []Option
32-
dev *Device
34+
dev device
3335
}
3436

3537
func Serve(addr, odir, devmem, devshm, cfgdir string) error {
@@ -56,6 +58,10 @@ func newServer(addr, odir, devmem, devshm, cfgdir string, opts ...Option) (*serv
5658
devshm: devshm,
5759
cfgdir: cfgdir,
5860

61+
newDevice: func(devmem, odir, devshm, cfgdir string, opts ...Option) (device, error) {
62+
return newCDevice(devmem, odir, devshm, cfgdir, opts...)
63+
},
64+
5965
opts: opts,
6066
}
6167
return srv, nil
@@ -84,7 +90,7 @@ func (srv *server) handle(conn net.Conn) error {
8490
defer srv.msg.Printf("serving %v... [done]", conn.RemoteAddr())
8591

8692
srv.dev = nil
87-
dev, err := newDevice(
93+
dev, err := srv.newDevice(
8894
srv.devmem, srv.odir, srv.devshm, srv.cfgdir,
8995
srv.opts...,
9096
)
@@ -94,9 +100,6 @@ func (srv *server) handle(conn net.Conn) error {
94100
defer dev.Close()
95101
srv.dev = dev
96102

97-
// FIXME(sbinet): use DIM hooks to configure those
98-
dev.id = 1
99-
dev.cfg.hr.rshaper = 3
100103
dim, _, err := net.SplitHostPort(conn.RemoteAddr().String())
101104
if err != nil {
102105
return fmt.Errorf("could not extract dim-host ip from %q: %+v", conn.RemoteAddr().String(), err)
@@ -123,19 +126,11 @@ loop:
123126
}
124127
continue
125128
}
126-
dev.msg.Printf("received request: name=%q", req.Name)
129+
srv.msg.Printf("received request: name=%q", req.Name)
127130

128131
switch strings.ToLower(req.Name) {
129132
case "scan":
130-
var args []struct {
131-
RFM int `json:"rfm"`
132-
EDA int `json:"eda"`
133-
Slot int `json:"slot"`
134-
DAQ struct {
135-
RShaper int `json:"rshaper"`
136-
TriggerMode int `json:"trigger_type"`
137-
} `json:"daq_state"`
138-
}
133+
var args []BootConfig
139134
err = json.Unmarshal(*req.Args, &args)
140135
if err != nil {
141136
srv.msg.Printf("could not decode %q payload: %+v",
@@ -144,21 +139,14 @@ loop:
144139
srv.reply(conn, err)
145140
continue
146141
}
147-
dev.rfms = nil
148-
dev.difs = make(map[int]uint8, nRFM)
149-
dev.cfg.daq.rfm = 0
150-
for _, arg := range args {
151-
dev.msg.Printf(
152-
"scan: rfm=%d, eda-id=%d, slot-id=%d",
153-
arg.RFM, arg.EDA, arg.Slot,
154-
)
155-
dev.rfms = append(dev.rfms, arg.Slot)
156-
dev.difs[arg.Slot] = uint8(arg.RFM)
157-
dev.id = uint32(arg.EDA)
158-
dev.cfg.daq.rfm |= (1 << arg.Slot)
159-
dev.cfg.hr.rshaper = uint32(arg.DAQ.RShaper)
142+
143+
err = dev.Boot(args)
144+
if err != nil {
145+
srv.msg.Printf("could not bootstrap EDA: %+v", err)
146+
srv.reply(conn, err)
147+
continue
160148
}
161-
err = nil
149+
162150
srv.reply(conn, err)
163151
// FIXME(sbinet): compare expected scan-result with
164152
// EDA introspection functions.
@@ -170,7 +158,7 @@ loop:
170158
case "configure":
171159
var args []struct {
172160
DIF uint8 `json:"dif"`
173-
ASICS []conddb.ASIC `json:"asics"`
161+
ASICs []conddb.ASIC `json:"asics"`
174162
}
175163
err = json.Unmarshal(*req.Args, &args)
176164
if err != nil {
@@ -182,17 +170,11 @@ loop:
182170
}
183171

184172
for _, arg := range args {
185-
// FIXME(sbinet): handle hysteresis, make sure addrs are unique.
186-
dev.cfg.daq.addrs = append(dev.cfg.daq.addrs, fmt.Sprintf(
187-
"%s:%d", dim, 10000+int(arg.DIF),
188-
))
189-
srv.msg.Printf("addrs: %q", dev.cfg.daq.addrs)
190-
191-
dev.setDBConfig(arg.DIF, arg.ASICS)
192-
193-
err = dev.configASICs(arg.DIF)
173+
addr := fmt.Sprintf("%s:%d", dim, 10000+int(arg.DIF))
174+
srv.msg.Printf("configuring DIF=%d with addr=%q", arg.DIF, addr)
175+
err := dev.ConfigureDIF(addr, arg.DIF, arg.ASICs)
194176
if err != nil {
195-
srv.msg.Printf("could not configure EDA device: %+v", err)
177+
srv.msg.Printf("could not configure EDA device(dif=%d): %+v", arg.DIF, err)
196178
srv.reply(conn, err)
197179
continue
198180
}

eda/server_test.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,9 @@ func TestServer(t *testing.T) {
6161
if err != nil {
6262
t.Fatal(err)
6363
}
64+
srv.newDevice = func(devmem, odir, devshm, cfgdir string, opts ...Option) (device, error) {
65+
return newDevice(devmem, odir, devshm, cfgdir, opts...)
66+
}
6467

6568
quit := make(chan int)
6669
defer close(quit)
@@ -207,7 +210,7 @@ func TestServer(t *testing.T) {
207210
t.Fatalf("could not send %q: %+v", name, err)
208211
}
209212
ack(name)
210-
fdev.fpga(srv.dev, 2, regs.O_SC_DONE_2, nil)
213+
fdev.fpga(srv.dev.(*Device), 2, regs.O_SC_DONE_2, nil)
211214

212215
case "err-invalid-req":
213216
_, err = dim.Write([]byte("{]"))

0 commit comments

Comments
 (0)